mirror of
https://github.com/tmux/tmux.git
synced 2025-09-02 21:56:57 +00:00
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.
This commit is contained in:
@ -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:
|
||||
|
Reference in New Issue
Block a user