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 @@ -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); }