aboutsummaryrefslogtreecommitdiff
path: root/window-copy.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2014-06-21 19:48:03 +0100
committerNicholas Marriott <nicholas.marriott@gmail.com>2014-06-21 19:48:03 +0100
commitf8481f93c5fc92f5503a2bdd94c60375a2c81bb5 (patch)
treee8cd0d3a0cfc16a5d602a9143d301b818953ec68 /window-copy.c
parentcddf50b715be8732ffd0732d33a886b788a231c5 (diff)
parent0c5ed177c4e5178127dc8fe3528985df8ff988a6 (diff)
downloadrtmux-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.c27
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);
}