diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2014-06-21 19:48:03 +0100 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2014-06-21 19:48:03 +0100 |
commit | f8481f93c5fc92f5503a2bdd94c60375a2c81bb5 (patch) | |
tree | e8cd0d3a0cfc16a5d602a9143d301b818953ec68 /window-copy.c | |
parent | cddf50b715be8732ffd0732d33a886b788a231c5 (diff) | |
parent | 0c5ed177c4e5178127dc8fe3528985df8ff988a6 (diff) | |
download | rtmux-f8481f93c5fc92f5503a2bdd94c60375a2c81bb5.tar.gz rtmux-f8481f93c5fc92f5503a2bdd94c60375a2c81bb5.tar.bz2 rtmux-f8481f93c5fc92f5503a2bdd94c60375a2c81bb5.zip |
Merge branch 'master' of ssh://git.code.sf.net/p/tmux/tmux-code
Diffstat (limited to 'window-copy.c')
-rw-r--r-- | window-copy.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/window-copy.c b/window-copy.c index ac29e6d9..0775bcb9 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1360,7 +1360,7 @@ window_copy_get_selection(struct window_pane *wp, size_t *len) struct screen *s = &data->screen; char *buf; size_t off; - u_int i, xx, yy, sx, sy, ex, ey; + u_int i, xx, yy, sx, sy, ex, ey, ey_last; u_int firstsx, lastex, restex, restsx; int keys; @@ -1389,9 +1389,9 @@ window_copy_get_selection(struct window_pane *wp, size_t *len) } /* Trim ex to end of line. */ - xx = window_copy_find_length(wp, ey); - if (ex > xx) - ex = xx; + ey_last = window_copy_find_length(wp, ey); + if (ex > ey_last) + ex = ey_last; /* * Deal with rectangle-copy if necessary; four situations: start of @@ -1442,17 +1442,10 @@ window_copy_get_selection(struct window_pane *wp, size_t *len) } /* Copy the lines. */ - if (sy == ey) - window_copy_copy_line(wp, &buf, &off, sy, firstsx, lastex); - else { - window_copy_copy_line(wp, &buf, &off, sy, firstsx, restex); - if (ey - sy > 1) { - for (i = sy + 1; i < ey; i++) { - window_copy_copy_line( - wp, &buf, &off, i, restsx, restex); - } - } - window_copy_copy_line(wp, &buf, &off, ey, restsx, lastex); + for (i = sy; i <= ey; i++) { + window_copy_copy_line(wp, &buf, &off, i, + (i == sy ? firstsx : restsx), + (i == ey ? lastex : restex)); } /* Don't bother if no data. */ @@ -1460,7 +1453,9 @@ window_copy_get_selection(struct window_pane *wp, size_t *len) free(buf); return (NULL); } - *len = off - 1; /* remove final \n */ + if (keys == MODEKEY_EMACS || lastex <= ey_last) + off -= 1; /* remove final \n (unless at end in vi mode) */ + *len = off; return (buf); } |