=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/window-copy.c,v retrieving revision 1.27 retrieving revision 1.28 diff -c -r1.27 -r1.28 *** src/usr.bin/tmux/window-copy.c 2009/09/10 17:16:24 1.27 --- src/usr.bin/tmux/window-copy.c 2009/10/06 07:09:00 1.28 *************** *** 1,4 **** ! /* $OpenBSD: window-copy.c,v 1.27 2009/09/10 17:16:24 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: window-copy.c,v 1.28 2009/10/06 07:09:00 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 61,68 **** void window_copy_cursor_end_of_line(struct window_pane *); void window_copy_cursor_left(struct window_pane *); void window_copy_cursor_right(struct window_pane *); ! void window_copy_cursor_up(struct window_pane *); ! void window_copy_cursor_down(struct window_pane *); void window_copy_cursor_next_word(struct window_pane *); void window_copy_cursor_previous_word(struct window_pane *); void window_copy_scroll_up(struct window_pane *, u_int); --- 61,68 ---- void window_copy_cursor_end_of_line(struct window_pane *); void window_copy_cursor_left(struct window_pane *); void window_copy_cursor_right(struct window_pane *); ! void window_copy_cursor_up(struct window_pane *, int); ! void window_copy_cursor_down(struct window_pane *, int); void window_copy_cursor_next_word(struct window_pane *); void window_copy_cursor_previous_word(struct window_pane *); void window_copy_scroll_up(struct window_pane *, u_int); *************** *** 235,245 **** window_copy_cursor_right(wp); return; case MODEKEYCOPY_UP: ! window_copy_cursor_up(wp); return; case MODEKEYCOPY_DOWN: ! window_copy_cursor_down(wp); return; case MODEKEYCOPY_PREVIOUSPAGE: window_copy_pageup(wp); break; --- 235,251 ---- window_copy_cursor_right(wp); return; case MODEKEYCOPY_UP: ! window_copy_cursor_up(wp, 0); return; case MODEKEYCOPY_DOWN: ! window_copy_cursor_down(wp, 0); return; + case MODEKEYCOPY_SCROLLUP: + window_copy_cursor_up(wp, 1); + break; + case MODEKEYCOPY_SCROLLDOWN: + window_copy_cursor_down(wp, 1); + break; case MODEKEYCOPY_PREVIOUSPAGE: window_copy_pageup(wp); break; *************** *** 1020,1026 **** struct window_copy_mode_data *data = wp->modedata; if (data->cx == 0) { ! window_copy_cursor_up(wp); window_copy_cursor_end_of_line(wp); } else { window_copy_update_cursor(wp, data->cx - 1, data->cy); --- 1026,1032 ---- struct window_copy_mode_data *data = wp->modedata; if (data->cx == 0) { ! window_copy_cursor_up(wp, 0); window_copy_cursor_end_of_line(wp); } else { window_copy_update_cursor(wp, data->cx - 1, data->cy); *************** *** 1040,1046 **** if (data->cx >= px) { window_copy_cursor_start_of_line(wp); ! window_copy_cursor_down(wp); } else { window_copy_update_cursor(wp, data->cx + 1, data->cy); if (window_copy_update_selection(wp)) --- 1046,1052 ---- if (data->cx >= px) { window_copy_cursor_start_of_line(wp); ! window_copy_cursor_down(wp, 0); } else { window_copy_update_cursor(wp, data->cx + 1, data->cy); if (window_copy_update_selection(wp)) *************** *** 1049,1055 **** } void ! window_copy_cursor_up(struct window_pane *wp) { struct window_copy_mode_data *data = wp->modedata; u_int ox, oy, px, py; --- 1055,1061 ---- } void ! window_copy_cursor_up(struct window_pane *wp, int scroll_only) { struct window_copy_mode_data *data = wp->modedata; u_int ox, oy, px, py; *************** *** 1062,1070 **** } data->cx = data->lastcx; ! if (data->cy == 0) window_copy_scroll_down(wp, 1); ! else { window_copy_update_cursor(wp, data->cx, data->cy - 1); if (window_copy_update_selection(wp)) window_copy_redraw_lines(wp, data->cy, 2); --- 1068,1078 ---- } data->cx = data->lastcx; ! if (scroll_only || data->cy == 0) { window_copy_scroll_down(wp, 1); ! if (scroll_only && window_copy_update_selection(wp)) ! window_copy_redraw_lines(wp, data->cy, 2); ! } else { window_copy_update_cursor(wp, data->cx, data->cy - 1); if (window_copy_update_selection(wp)) window_copy_redraw_lines(wp, data->cy, 2); *************** *** 1077,1083 **** } void ! window_copy_cursor_down(struct window_pane *wp) { struct window_copy_mode_data *data = wp->modedata; struct screen *s = &data->screen; --- 1085,1091 ---- } void ! window_copy_cursor_down(struct window_pane *wp, int scroll_only) { struct window_copy_mode_data *data = wp->modedata; struct screen *s = &data->screen; *************** *** 1091,1099 **** } data->cx = data->lastcx; ! if (data->cy == screen_size_y(s) - 1) window_copy_scroll_up(wp, 1); ! else { window_copy_update_cursor(wp, data->cx, data->cy + 1); if (window_copy_update_selection(wp)) window_copy_redraw_lines(wp, data->cy - 1, 2); --- 1099,1109 ---- } data->cx = data->lastcx; ! if (scroll_only || data->cy == screen_size_y(s) - 1) { window_copy_scroll_up(wp, 1); ! if (scroll_only && window_copy_update_selection(wp)) ! window_copy_redraw_lines(wp, data->cy - 1, 2); ! } else { window_copy_update_cursor(wp, data->cx, data->cy + 1); if (window_copy_update_selection(wp)) window_copy_redraw_lines(wp, data->cy - 1, 2); *************** *** 1137,1143 **** } px = 0; ! window_copy_cursor_down(wp); py =screen_hsize( &wp->base) + data->cy - data->oy; --- 1147,1153 ---- } px = 0; ! window_copy_cursor_down(wp, 0); py =screen_hsize( &wp->base) + data->cy - data->oy; *************** *** 1185,1191 **** (screen_hsize(&wp->base) == 0 || data->oy >= screen_hsize(&wp->base) - 1)) goto out; ! window_copy_cursor_up(wp); py = screen_hsize( &wp->base) + data->cy - data->oy; --- 1195,1201 ---- (screen_hsize(&wp->base) == 0 || data->oy >= screen_hsize(&wp->base) - 1)) goto out; ! window_copy_cursor_up(wp, 0); py = screen_hsize( &wp->base) + data->cy - data->oy;