mirror of
https://github.com/tmux/tmux.git
synced 2025-09-03 14:27:09 +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:
@ -109,6 +109,7 @@ window_choose_init(struct window_pane *wp)
|
||||
{
|
||||
struct window_choose_mode_data *data;
|
||||
struct screen *s;
|
||||
int keys;
|
||||
|
||||
wp->modedata = data = xmalloc(sizeof *data);
|
||||
|
||||
@ -124,9 +125,11 @@ window_choose_init(struct window_pane *wp)
|
||||
s->mode &= ~MODE_CURSOR;
|
||||
s->mode |= MODE_MOUSE;
|
||||
|
||||
mode_key_init(&data->mdata,
|
||||
options_get_number(&wp->window->options, "mode-keys"),
|
||||
MODEKEY_CHOOSEMODE);
|
||||
keys = options_get_number(&wp->window->options, "mode-keys");
|
||||
if (keys == MODEKEY_EMACS)
|
||||
mode_key_init(&data->mdata, mode_key_emacs_choice);
|
||||
else
|
||||
mode_key_init(&data->mdata, mode_key_vi_choice);
|
||||
|
||||
return (s);
|
||||
}
|
||||
@ -174,16 +177,16 @@ window_choose_key(struct window_pane *wp, unused struct client *c, int key)
|
||||
items = ARRAY_LENGTH(&data->list);
|
||||
|
||||
switch (mode_key_lookup(&data->mdata, key)) {
|
||||
case MODEKEYCMD_QUIT:
|
||||
case MODEKEYCHOICE_CANCEL:
|
||||
data->callbackfn(data->data, -1);
|
||||
window_pane_reset_mode(wp);
|
||||
break;
|
||||
case MODEKEYCMD_CHOOSE:
|
||||
case MODEKEYCHOICE_CHOOSE:
|
||||
item = &ARRAY_ITEM(&data->list, data->selected);
|
||||
data->callbackfn(data->data, item->idx);
|
||||
window_pane_reset_mode(wp);
|
||||
break;
|
||||
case MODEKEYCMD_UP:
|
||||
case MODEKEYCHOICE_UP:
|
||||
if (items == 0)
|
||||
break;
|
||||
if (data->selected == 0) {
|
||||
@ -205,7 +208,7 @@ window_choose_key(struct window_pane *wp, unused struct client *c, int key)
|
||||
screen_write_stop(&ctx);
|
||||
}
|
||||
break;
|
||||
case MODEKEYCMD_DOWN:
|
||||
case MODEKEYCHOICE_DOWN:
|
||||
if (items == 0)
|
||||
break;
|
||||
if (data->selected == items - 1) {
|
||||
@ -215,6 +218,7 @@ window_choose_key(struct window_pane *wp, unused struct client *c, int key)
|
||||
break;
|
||||
}
|
||||
data->selected++;
|
||||
|
||||
if (data->selected >= data->top + screen_size_y(&data->screen))
|
||||
window_choose_scroll_down(wp);
|
||||
else {
|
||||
@ -226,7 +230,7 @@ window_choose_key(struct window_pane *wp, unused struct client *c, int key)
|
||||
screen_write_stop(&ctx);
|
||||
}
|
||||
break;
|
||||
case MODEKEYCMD_PREVIOUSPAGE:
|
||||
case MODEKEYCHOICE_PAGEUP:
|
||||
if (data->selected < screen_size_y(s)) {
|
||||
data->selected = 0;
|
||||
data->top = 0;
|
||||
@ -239,7 +243,7 @@ window_choose_key(struct window_pane *wp, unused struct client *c, int key)
|
||||
}
|
||||
window_choose_redraw_screen(wp);
|
||||
break;
|
||||
case MODEKEYCMD_NEXTPAGE:
|
||||
case MODEKEYCHOICE_PAGEDOWN:
|
||||
data->selected += screen_size_y(s);
|
||||
if (data->selected > items - 1)
|
||||
data->selected = items - 1;
|
||||
|
Reference in New Issue
Block a user