diff options
Diffstat (limited to 'window-choose.c')
-rw-r--r-- | window-choose.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/window-choose.c b/window-choose.c index 6a0d447f..c5294634 100644 --- a/window-choose.c +++ b/window-choose.c @@ -1,4 +1,4 @@ -/* $Id: window-choose.c,v 1.18 2009-07-28 22:49:26 tcunha Exp $ */ +/* $Id: window-choose.c,v 1.19 2009-07-28 22:55:59 tcunha Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net> @@ -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; |