diff options
author | nicm <nicm> | 2014-08-11 22:18:16 +0000 |
---|---|---|
committer | nicm <nicm> | 2014-08-11 22:18:16 +0000 |
commit | 29d20a55b645600feca1b54a13333e598336dad2 (patch) | |
tree | ea4fb9fdc5ebf7c6f7ba1899f203575668856e51 /screen.c | |
parent | f518a077b176e65a30a187af21b00b0b9031dad7 (diff) | |
download | rtmux-29d20a55b645600feca1b54a13333e598336dad2.tar.gz rtmux-29d20a55b645600feca1b54a13333e598336dad2.tar.bz2 rtmux-29d20a55b645600feca1b54a13333e598336dad2.zip |
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.
Diffstat (limited to 'screen.c')
-rw-r--r-- | screen.c | 23 |
1 files changed, 18 insertions, 5 deletions
@@ -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 */ |