=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/window-copy.c,v retrieving revision 1.323 retrieving revision 1.324 diff -c -r1.323 -r1.324 *** src/usr.bin/tmux/window-copy.c 2021/06/10 07:56:47 1.323 --- src/usr.bin/tmux/window-copy.c 2021/06/10 07:58:42 1.324 *************** *** 1,4 **** ! /* $OpenBSD: window-copy.c,v 1.323 2021/06/10 07:56:47 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: window-copy.c,v 1.324 2021/06/10 07:58:42 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 1102,1111 **** window_copy_cmd_cursor_right(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; u_int np = wme->prefix; ! for (; np != 0; np--) ! window_copy_cursor_right(wme, 0); return (WINDOW_COPY_CMD_NOTHING); } --- 1102,1114 ---- window_copy_cmd_cursor_right(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; + struct window_copy_mode_data *data = wme->data; u_int np = wme->prefix; ! for (; np != 0; np--) { ! window_copy_cursor_right(wme, data->screen.sel != NULL && ! data->rectflag); ! } return (WINDOW_COPY_CMD_NOTHING); } *************** *** 4427,4436 **** struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int ox, oy, px, py; oy = screen_hsize(data->backing) + data->cy - data->oy; ox = window_copy_find_length(wme, oy); ! if (data->cx != ox) { data->lastcx = data->cx; data->lastsx = ox; } --- 4430,4441 ---- struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int ox, oy, px, py; + int norectsel; + norectsel = data->screen.sel == NULL || !data->rectflag; oy = screen_hsize(data->backing) + data->cy - data->oy; ox = window_copy_find_length(wme, oy); ! if (norectsel && data->cx != ox) { data->lastcx = data->cx; data->lastsx = ox; } *************** *** 4439,4445 **** window_copy_other_end(wme); if (scroll_only || data->cy == 0) { ! data->cx = data->lastcx; window_copy_scroll_down(wme, 1); if (scroll_only) { if (data->cy == screen_size_y(s) - 1) --- 4444,4451 ---- window_copy_other_end(wme); if (scroll_only || data->cy == 0) { ! if (norectsel) ! data->cx = data->lastcx; window_copy_scroll_down(wme, 1); if (scroll_only) { if (data->cy == screen_size_y(s) - 1) *************** *** 4448,4454 **** window_copy_redraw_lines(wme, data->cy, 2); } } else { ! window_copy_update_cursor(wme, data->lastcx, data->cy - 1); if (window_copy_update_selection(wme, 1, 0)) { if (data->cy == screen_size_y(s) - 1) window_copy_redraw_lines(wme, data->cy, 1); --- 4454,4464 ---- window_copy_redraw_lines(wme, data->cy, 2); } } else { ! if (norectsel) { ! window_copy_update_cursor(wme, data->lastcx, ! data->cy - 1); ! } else ! window_copy_update_cursor(wme, data->cx, data->cy - 1); if (window_copy_update_selection(wme, 1, 0)) { if (data->cy == screen_size_y(s) - 1) window_copy_redraw_lines(wme, data->cy, 1); *************** *** 4457,4463 **** } } ! if (data->screen.sel == NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; px = window_copy_find_length(wme, py); if ((data->cx >= data->lastsx && data->cx != px) || --- 4467,4473 ---- } } ! if (norectsel) { py = screen_hsize(data->backing) + data->cy - data->oy; px = window_copy_find_length(wme, py); if ((data->cx >= data->lastsx && data->cx != px) || *************** *** 4494,4503 **** struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int ox, oy, px, py; oy = screen_hsize(data->backing) + data->cy - data->oy; ox = window_copy_find_length(wme, oy); ! if (data->cx != ox) { data->lastcx = data->cx; data->lastsx = ox; } --- 4504,4515 ---- struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int ox, oy, px, py; + int norectsel; + norectsel = data->screen.sel == NULL || !data->rectflag; oy = screen_hsize(data->backing) + data->cy - data->oy; ox = window_copy_find_length(wme, oy); ! if (norectsel && data->cx != ox) { data->lastcx = data->cx; data->lastsx = ox; } *************** *** 4506,4522 **** window_copy_other_end(wme); if (scroll_only || data->cy == screen_size_y(s) - 1) { ! data->cx = data->lastcx; window_copy_scroll_up(wme, 1); if (scroll_only && data->cy > 0) window_copy_redraw_lines(wme, data->cy - 1, 2); } else { ! window_copy_update_cursor(wme, data->lastcx, data->cy + 1); if (window_copy_update_selection(wme, 1, 0)) window_copy_redraw_lines(wme, data->cy - 1, 2); } ! if (data->screen.sel == NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; px = window_copy_find_length(wme, py); if ((data->cx >= data->lastsx && data->cx != px) || --- 4518,4539 ---- window_copy_other_end(wme); if (scroll_only || data->cy == screen_size_y(s) - 1) { ! if (norectsel) ! data->cx = data->lastcx; window_copy_scroll_up(wme, 1); if (scroll_only && data->cy > 0) window_copy_redraw_lines(wme, data->cy - 1, 2); } else { ! if (norectsel) { ! window_copy_update_cursor(wme, data->lastcx, ! data->cy + 1); ! } else ! window_copy_update_cursor(wme, data->cx, data->cy + 1); if (window_copy_update_selection(wme, 1, 0)) window_copy_redraw_lines(wme, data->cy - 1, 2); } ! if (norectsel) { py = screen_hsize(data->backing) + data->cy - data->oy; px = window_copy_find_length(wme, py); if ((data->cx >= data->lastsx && data->cx != px) ||