mirror of
https://github.com/tmate-io/tmate.git
synced 2024-11-23 00:23:08 +01:00
Fix two copy mode problems:
1. In vi mode the selection doesn't include the last character if you moved the cursor up or left. 2. In emacs mode the selection includes the last character if you moved the cursor to the left. From Balazs Kezes.
This commit is contained in:
parent
f518a077b1
commit
29d20a55b6
23
screen.c
23
screen.c
@ -276,6 +276,7 @@ int
|
||||
screen_check_selection(struct screen *s, u_int px, u_int py)
|
||||
{
|
||||
struct screen_sel *sel = &s->sel;
|
||||
u_int xx;
|
||||
|
||||
if (!sel->flag)
|
||||
return (0);
|
||||
@ -325,16 +326,24 @@ screen_check_selection(struct screen *s, u_int px, u_int py)
|
||||
if (py < sel->sy || py > sel->ey)
|
||||
return (0);
|
||||
|
||||
if ((py == sel->sy && px < sel->sx)
|
||||
|| (py == sel->ey && px > sel->ex))
|
||||
if (py == sel->sy && px < sel->sx)
|
||||
return 0;
|
||||
|
||||
if (py == sel->ey && px > sel->ex)
|
||||
return (0);
|
||||
} else if (sel->sy > sel->ey) {
|
||||
/* starting line > ending line -- upward selection. */
|
||||
if (py > sel->sy || py < sel->ey)
|
||||
return (0);
|
||||
|
||||
if ((py == sel->sy && px >= sel->sx)
|
||||
|| (py == sel->ey && px < sel->ex))
|
||||
if (py == sel->ey && px < sel->ex)
|
||||
return (0);
|
||||
|
||||
if (sel->modekeys == MODEKEY_EMACS)
|
||||
xx = sel->sx - 1;
|
||||
else
|
||||
xx = sel->sx;
|
||||
if (py == sel->sy && px > xx)
|
||||
return (0);
|
||||
} else {
|
||||
/* starting line == ending line. */
|
||||
@ -343,7 +352,11 @@ screen_check_selection(struct screen *s, u_int px, u_int py)
|
||||
|
||||
if (sel->ex < sel->sx) {
|
||||
/* cursor (ex) is on the left */
|
||||
if (px > sel->sx || px < sel->ex)
|
||||
if (sel->modekeys == MODEKEY_EMACS)
|
||||
xx = sel->sx - 1;
|
||||
else
|
||||
xx = sel->sx;
|
||||
if (px > xx || px < sel->ex)
|
||||
return (0);
|
||||
} else {
|
||||
/* selection start (sx) is on the left */
|
||||
|
1
tmux.h
1
tmux.h
@ -794,6 +794,7 @@ LIST_HEAD(joblist, job);
|
||||
struct screen_sel {
|
||||
int flag;
|
||||
int rectflag;
|
||||
int modekeys;
|
||||
|
||||
u_int sx;
|
||||
u_int sy;
|
||||
|
@ -199,6 +199,7 @@ window_copy_init(struct window_pane *wp)
|
||||
mode_key_init(&data->mdata, &mode_key_tree_emacs_copy);
|
||||
else
|
||||
mode_key_init(&data->mdata, &mode_key_tree_vi_copy);
|
||||
s->sel.modekeys = keys;
|
||||
|
||||
data->backing = NULL;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user