Sync OpenBSD patchset 621:

Alter next-word to have vi-like movement behaviour, and add next-word-end with
the existing emacs behaviour. From Micah Cowan.
This commit is contained in:
Tiago Cunha 2010-01-28 22:45:57 +00:00
parent 0e320881d5
commit 735cfaf09a
4 changed files with 50 additions and 7 deletions

View File

@ -1,4 +1,4 @@
/* $Id: mode-key.c,v 1.38 2010-01-28 22:41:45 tcunha Exp $ */ /* $Id: mode-key.c,v 1.39 2010-01-28 22:45:57 tcunha Exp $ */
/* /*
* Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@ -90,6 +90,7 @@ struct mode_key_cmdstr mode_key_cmdstr_copy[] = {
{ MODEKEYCOPY_MIDDLELINE, "middle-line" }, { MODEKEYCOPY_MIDDLELINE, "middle-line" },
{ MODEKEYCOPY_NEXTPAGE, "page-down" }, { MODEKEYCOPY_NEXTPAGE, "page-down" },
{ MODEKEYCOPY_NEXTWORD, "next-word" }, { MODEKEYCOPY_NEXTWORD, "next-word" },
{ MODEKEYCOPY_NEXTWORDEND, "next-word-end" },
{ MODEKEYCOPY_PREVIOUSPAGE, "page-up" }, { MODEKEYCOPY_PREVIOUSPAGE, "page-up" },
{ MODEKEYCOPY_PREVIOUSWORD, "previous-word" }, { MODEKEYCOPY_PREVIOUSWORD, "previous-word" },
{ MODEKEYCOPY_RIGHT, "cursor-right" }, { MODEKEYCOPY_RIGHT, "cursor-right" },
@ -276,7 +277,7 @@ const struct mode_key_entry mode_key_emacs_copy[] = {
{ '\027' /* C-w */, 0, MODEKEYCOPY_COPYSELECTION }, { '\027' /* C-w */, 0, MODEKEYCOPY_COPYSELECTION },
{ '\033' /* Escape */, 0, MODEKEYCOPY_CANCEL }, { '\033' /* Escape */, 0, MODEKEYCOPY_CANCEL },
{ 'b' | KEYC_ESCAPE, 0, MODEKEYCOPY_PREVIOUSWORD }, { 'b' | KEYC_ESCAPE, 0, MODEKEYCOPY_PREVIOUSWORD },
{ 'f' | KEYC_ESCAPE, 0, MODEKEYCOPY_NEXTWORD }, { 'f' | KEYC_ESCAPE, 0, MODEKEYCOPY_NEXTWORDEND },
{ 'g', 0, MODEKEYCOPY_GOTOLINE }, { 'g', 0, MODEKEYCOPY_GOTOLINE },
{ 'm' | KEYC_ESCAPE, 0, MODEKEYCOPY_BACKTOINDENTATION }, { 'm' | KEYC_ESCAPE, 0, MODEKEYCOPY_BACKTOINDENTATION },
{ 'n', 0, MODEKEYCOPY_SEARCHAGAIN }, { 'n', 0, MODEKEYCOPY_SEARCHAGAIN },

7
tmux.1
View File

@ -1,4 +1,4 @@
.\" $Id: tmux.1,v 1.224 2010-01-28 22:41:45 tcunha Exp $ .\" $Id: tmux.1,v 1.225 2010-01-28 22:45:57 tcunha Exp $
.\" .\"
.\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> .\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
.\" .\"
@ -14,7 +14,7 @@
.\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
.\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\" .\"
.Dd $Mdocdate: January 25 2010 $ .Dd $Mdocdate: January 27 2010 $
.Dt TMUX 1 .Dt TMUX 1
.Os .Os
.Sh NAME .Sh NAME
@ -555,7 +555,8 @@ The following keys are supported as appropriate for the mode:
.It Li "Half page down" Ta "C-d" Ta "M-Down" .It Li "Half page down" Ta "C-d" Ta "M-Down"
.It Li "Half page up" Ta "C-u" Ta "M-Up" .It Li "Half page up" Ta "C-u" Ta "M-Up"
.It Li "Next page" Ta "C-f" Ta "Page down" .It Li "Next page" Ta "C-f" Ta "Page down"
.It Li "Next word" Ta "w" Ta "M-f" .It Li "Next word" Ta "w" Ta ""
.It Li "Next word end" Ta "e" Ta "M-f"
.It Li "Paste buffer" Ta "p" Ta "C-y" .It Li "Paste buffer" Ta "p" Ta "C-y"
.It Li "Previous page" Ta "C-b" Ta "Page up" .It Li "Previous page" Ta "C-b" Ta "Page up"
.It Li "Previous word" Ta "b" Ta "M-b" .It Li "Previous word" Ta "b" Ta "M-b"

3
tmux.h
View File

@ -1,4 +1,4 @@
/* $Id: tmux.h,v 1.537 2010-01-28 22:41:45 tcunha Exp $ */ /* $Id: tmux.h,v 1.538 2010-01-28 22:45:57 tcunha Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -460,6 +460,7 @@ enum mode_key_cmd {
MODEKEYCOPY_MIDDLELINE, MODEKEYCOPY_MIDDLELINE,
MODEKEYCOPY_NEXTPAGE, MODEKEYCOPY_NEXTPAGE,
MODEKEYCOPY_NEXTWORD, MODEKEYCOPY_NEXTWORD,
MODEKEYCOPY_NEXTWORDEND,
MODEKEYCOPY_PREVIOUSPAGE, MODEKEYCOPY_PREVIOUSPAGE,
MODEKEYCOPY_PREVIOUSWORD, MODEKEYCOPY_PREVIOUSWORD,
MODEKEYCOPY_RIGHT, MODEKEYCOPY_RIGHT,

View File

@ -1,4 +1,4 @@
/* $Id: window-copy.c,v 1.98 2010-01-28 22:43:24 tcunha Exp $ */ /* $Id: window-copy.c,v 1.99 2010-01-28 22:45:57 tcunha Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -64,6 +64,7 @@ void window_copy_cursor_right(struct window_pane *);
void window_copy_cursor_up(struct window_pane *, int); void window_copy_cursor_up(struct window_pane *, int);
void window_copy_cursor_down(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_next_word(struct window_pane *);
void window_copy_cursor_next_word_end(struct window_pane *);
void window_copy_cursor_previous_word(struct window_pane *); void window_copy_cursor_previous_word(struct window_pane *);
void window_copy_scroll_up(struct window_pane *, u_int); void window_copy_scroll_up(struct window_pane *, u_int);
void window_copy_scroll_down(struct window_pane *, u_int); void window_copy_scroll_down(struct window_pane *, u_int);
@ -336,6 +337,9 @@ window_copy_key(struct window_pane *wp, struct client *c, int key)
case MODEKEYCOPY_NEXTWORD: case MODEKEYCOPY_NEXTWORD:
window_copy_cursor_next_word(wp); window_copy_cursor_next_word(wp);
break; break;
case MODEKEYCOPY_NEXTWORDEND:
window_copy_cursor_next_word_end(wp);
break;
case MODEKEYCOPY_PREVIOUSWORD: case MODEKEYCOPY_PREVIOUSWORD:
window_copy_cursor_previous_word(wp); window_copy_cursor_previous_word(wp);
break; break;
@ -1169,6 +1173,42 @@ window_copy_cursor_next_word(struct window_pane *wp)
xx = window_copy_find_length(wp, py); xx = window_copy_find_length(wp, py);
yy = screen_hsize(base_s) + screen_size_y(base_s) - 1; yy = screen_hsize(base_s) + screen_size_y(base_s) - 1;
/* Are we in a word? Skip it! */
while (!window_copy_is_space(wp, px, py))
px++;
/* Find the start of a word. */
while (px > xx || window_copy_is_space(wp, px, py)) {
/* Past the end of the line? Nothing but spaces. */
if (px > xx) {
if (py == yy)
return;
window_copy_cursor_down(wp, 0);
px = 0;
py = screen_hsize(base_s) + data->cy - data->oy;
xx = window_copy_find_length(wp, py);
}
px++;
}
window_copy_update_cursor(wp, px, data->cy);
if (window_copy_update_selection(wp))
window_copy_redraw_lines(wp, data->cy, 1);
}
void
window_copy_cursor_next_word_end(struct window_pane *wp)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *base_s = &wp->base;
u_int px, py, xx, yy;
px = data->cx;
py = screen_hsize(base_s) + data->cy - data->oy;
xx = window_copy_find_length(wp, py);
yy = screen_hsize(base_s) + screen_size_y(base_s) - 1;
/* Are we on spaces? Skip 'em! */ /* Are we on spaces? Skip 'em! */
while (px > xx || window_copy_is_space(wp, px, py)) { while (px > xx || window_copy_is_space(wp, px, py)) {
/* Nothing but spaces past the end of the line, so move down. */ /* Nothing but spaces past the end of the line, so move down. */