=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/window-copy.c,v retrieving revision 1.7 retrieving revision 1.8 diff -c -r1.7 -r1.8 *** src/usr.bin/tmux/window-copy.c 2009/07/23 17:03:47 1.7 --- src/usr.bin/tmux/window-copy.c 2009/07/27 07:42:45 1.8 *************** *** 1,4 **** ! /* $OpenBSD: window-copy.c,v 1.7 2009/07/23 17:03:47 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: window-copy.c,v 1.8 2009/07/27 07:42:45 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 796,850 **** window_copy_set_cursor_x(wp, px); } void window_copy_cursor_previous_word(struct window_pane *wp) { struct window_copy_mode_data *data = wp->modedata; ! u_int ox, px, py, skip; ! ox = px = data->ox + data->cx; py = screen_hsize(&wp->base) + data->cy - data->oy; ! skip = 1; ! if (px != 0) { ! /* If currently on a space, skip space. */ ! if (window_copy_is_space(wp, px - 1, py)) ! skip = 0; ! } for (;;) { ! if (px == 0) { ! if (ox != 0) break; ! while (px == 0) { ! if (data->cy == 0 && ! (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; ! px = window_copy_find_length(wp, py); ! } ! goto out; } ! if (skip) { ! /* Currently skipping non-space (until space). */ ! if (window_copy_is_space(wp, px - 1, py)) ! skip = 0; ! } else { ! /* Currently skipping space (until non-space). */ ! if (!window_copy_is_space(wp, px - 1, py)) ! break; ! } ! px--; - } - out: window_copy_set_cursor_x(wp, px); } --- 796,835 ---- window_copy_set_cursor_x(wp, px); } + /* Move to the previous place where a word begins. */ void window_copy_cursor_previous_word(struct window_pane *wp) { struct window_copy_mode_data *data = wp->modedata; ! u_int px, py; ! px = data->ox + data->cx; py = screen_hsize(&wp->base) + data->cy - data->oy; ! /* Move back to the previous word character. */ for (;;) { ! if (px > 0) { ! px--; ! if (!window_copy_is_space(wp, px, py)) break; + } else { + if (data->cy == 0 && + (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; ! px = window_copy_find_length(wp, py); } + } ! /* Move back to the beginning of this word. */ ! while (px > 0 && !window_copy_is_space(wp, px - 1, py)) px--; + out: window_copy_set_cursor_x(wp, px); }