diff options
author | 2009-07-27 19:29:35 +0000 | |
---|---|---|
committer | 2009-07-27 19:29:35 +0000 | |
commit | c538f0fca807245abcc69cdacc1ca06291006e27 (patch) | |
tree | 1e32dbf91db80b81207505b75459feb35b2cae68 /usr.bin/tmux/window-copy.c | |
parent | Please don't commit documentation for changes which don't compile in (diff) | |
download | wireguard-openbsd-c538f0fca807245abcc69cdacc1ca06291006e27.tar.xz wireguard-openbsd-c538f0fca807245abcc69cdacc1ca06291006e27.zip |
Change mode key bindings from big switches into a set of tables. Rather than
lumping them all together, split editing keys from those used in choice/more
mode and those for copy/scroll mode.
Tidier and clearer, and the first step towards customisable mode keys.
Diffstat (limited to 'usr.bin/tmux/window-copy.c')
-rw-r--r-- | usr.bin/tmux/window-copy.c | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/usr.bin/tmux/window-copy.c b/usr.bin/tmux/window-copy.c index ce3ee84c51c..40a92dc86bb 100644 --- a/usr.bin/tmux/window-copy.c +++ b/usr.bin/tmux/window-copy.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window-copy.c,v 1.9 2009/07/27 18:51:46 nicm Exp $ */ +/* $OpenBSD: window-copy.c,v 1.10 2009/07/27 19:29:35 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -94,6 +94,7 @@ window_copy_init(struct window_pane *wp) struct screen *s; struct screen_write_ctx ctx; u_int i; + int keys; wp->modedata = data = xmalloc(sizeof *data); data->ox = 0; @@ -105,8 +106,11 @@ window_copy_init(struct window_pane *wp) screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0); s->mode |= MODE_MOUSE; - mode_key_init(&data->mdata, - options_get_number(&wp->window->options, "mode-keys"), 0); + keys = options_get_number(&wp->window->options, "mode-keys"); + if (keys == MODEKEY_EMACS) + mode_key_init(&data->mdata, mode_key_emacs_copy); + else + mode_key_init(&data->mdata, mode_key_vi_copy); s->cx = data->cx; s->cy = data->cy; @@ -164,25 +168,25 @@ window_copy_key(struct window_pane *wp, struct client *c, int key) struct screen *s = &data->screen; switch (mode_key_lookup(&data->mdata, key)) { - case MODEKEYCMD_QUIT: + case MODEKEYCOPY_QUIT: window_pane_reset_mode(wp); break; - case MODEKEYCMD_LEFT: + case MODEKEYCOPY_LEFT: window_copy_cursor_left(wp); return; - case MODEKEYCMD_RIGHT: + case MODEKEYCOPY_RIGHT: window_copy_cursor_right(wp); return; - case MODEKEYCMD_UP: + case MODEKEYCOPY_UP: window_copy_cursor_up(wp); return; - case MODEKEYCMD_DOWN: + case MODEKEYCOPY_DOWN: window_copy_cursor_down(wp); return; - case MODEKEYCMD_PREVIOUSPAGE: + case MODEKEYCOPY_PREVIOUSPAGE: window_copy_pageup(wp); break; - case MODEKEYCMD_NEXTPAGE: + case MODEKEYCOPY_NEXTPAGE: if (data->oy < screen_size_y(s)) data->oy = 0; else @@ -190,33 +194,33 @@ window_copy_key(struct window_pane *wp, struct client *c, int key) window_copy_update_selection(wp); window_copy_redraw_screen(wp); break; - case MODEKEYCMD_STARTSELECTION: + case MODEKEYCOPY_STARTSELECTION: window_copy_start_selection(wp); window_copy_redraw_screen(wp); break; - case MODEKEYCMD_CLEARSELECTION: + case MODEKEYCOPY_CLEARSELECTION: screen_clear_selection(&data->screen); window_copy_redraw_screen(wp); break; - case MODEKEYCMD_COPYSELECTION: + case MODEKEYCOPY_COPYSELECTION: if (c != NULL && c->session != NULL) { window_copy_copy_selection(wp, c); window_pane_reset_mode(wp); } break; - case MODEKEYCMD_STARTOFLINE: + case MODEKEYCOPY_STARTOFLINE: window_copy_cursor_start_of_line(wp); break; - case MODEKEYCMD_BACKTOINDENTATION: + case MODEKEYCOPY_BACKTOINDENTATION: window_copy_cursor_back_to_indentation(wp); break; - case MODEKEYCMD_ENDOFLINE: + case MODEKEYCOPY_ENDOFLINE: window_copy_cursor_end_of_line(wp); break; - case MODEKEYCMD_NEXTWORD: + case MODEKEYCOPY_NEXTWORD: window_copy_cursor_next_word(wp); break; - case MODEKEYCMD_PREVIOUSWORD: + case MODEKEYCOPY_PREVIOUSWORD: window_copy_cursor_previous_word(wp); break; default: |