summaryrefslogtreecommitdiffstats
path: root/window-choose.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-07-27 19:29:35 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-07-27 19:29:35 +0000
commitd95274c5f294ddf1341f66019fee47a35b4f2561 (patch)
treeb0e4b6d58f3c64091a740ab4de2e186549860fd5 /window-choose.c
parent13e29dd7b5dfcefdfda6a1dd3c3f78c9cd7f1cc9 (diff)
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 'window-choose.c')
-rw-r--r--window-choose.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/window-choose.c b/window-choose.c
index 8439c9a0..b1ae3bc5 100644
--- a/window-choose.c
+++ b/window-choose.c
@@ -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;