aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--window-copy.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/window-copy.c b/window-copy.c
index 7039f88c..a7aa8f4c 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -1,4 +1,4 @@
-/* $Id: window-copy.c,v 1.83 2009-08-20 11:52:39 tcunha Exp $ */
+/* $Id: window-copy.c,v 1.84 2009-08-21 21:12:07 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -97,6 +97,9 @@ struct window_copy_mode_data {
u_int cx;
u_int cy;
+ u_int lastcx; /* position in last line with content */
+ u_int lastsx; /* size of last line with content */
+
enum window_copy_input_type inputtype;
const char *inputprompt;
char *inputstr;
@@ -119,6 +122,9 @@ window_copy_init(struct window_pane *wp)
data->cx = wp->base.cx;
data->cy = wp->base.cy;
+ data->lastcx = 0;
+ data->lastsx = 0;
+
data->inputtype = WINDOW_COPY_OFF;
data->inputprompt = NULL;
data->inputstr = xstrdup("");
@@ -1045,7 +1051,12 @@ window_copy_cursor_up(struct window_pane *wp)
oy = screen_hsize(&wp->base) + data->cy - data->oy;
ox = window_copy_find_length(wp, oy);
+ if (ox != 0) {
+ data->lastcx = data->cx;
+ data->lastsx = ox;
+ }
+ data->cx = data->lastcx;
if (data->cy == 0)
window_copy_scroll_down(wp, 1);
else {
@@ -1056,8 +1067,7 @@ window_copy_cursor_up(struct window_pane *wp)
py = screen_hsize(&wp->base) + data->cy - data->oy;
px = window_copy_find_length(wp, py);
-
- if (data->cx >= px || data->cx >= ox)
+ if (data->cx >= data->lastsx || data->cx > px)
window_copy_cursor_end_of_line(wp);
}
@@ -1070,7 +1080,12 @@ window_copy_cursor_down(struct window_pane *wp)
oy = screen_hsize(&wp->base) + data->cy - data->oy;
ox = window_copy_find_length(wp, oy);
+ if (ox != 0) {
+ data->lastcx = data->cx;
+ data->lastsx = ox;
+ }
+ data->cx = data->lastcx;
if (data->cy == screen_size_y(s) - 1)
window_copy_scroll_up(wp, 1);
else {
@@ -1081,8 +1096,7 @@ window_copy_cursor_down(struct window_pane *wp)
py = screen_hsize(&wp->base) + data->cy - data->oy;
px = window_copy_find_length(wp, py);
-
- if (data->cx >= px || data->cx >= ox)
+ if (data->cx >= data->lastsx || data->cx > px)
window_copy_cursor_end_of_line(wp);
}