=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/Attic/window-choose.c,v retrieving revision 1.4 retrieving revision 1.5 diff -c -r1.4 -r1.5 *** src/usr.bin/tmux/Attic/window-choose.c 2009/07/27 18:51:46 1.4 --- src/usr.bin/tmux/Attic/window-choose.c 2009/07/27 19:29:35 1.5 *************** *** 1,4 **** ! /* $OpenBSD: window-choose.c,v 1.4 2009/07/27 18:51:46 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: window-choose.c,v 1.5 2009/07/27 19:29:35 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott *************** *** 109,114 **** --- 109,115 ---- { struct window_choose_mode_data *data; struct screen *s; + int keys; wp->modedata = data = xmalloc(sizeof *data); *************** *** 124,132 **** s->mode &= ~MODE_CURSOR; s->mode |= MODE_MOUSE; ! mode_key_init(&data->mdata, ! options_get_number(&wp->window->options, "mode-keys"), ! MODEKEY_CHOOSEMODE); return (s); } --- 125,135 ---- s->mode &= ~MODE_CURSOR; s->mode |= MODE_MOUSE; ! 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,189 **** items = ARRAY_LENGTH(&data->list); switch (mode_key_lookup(&data->mdata, key)) { ! case MODEKEYCMD_QUIT: data->callbackfn(data->data, -1); window_pane_reset_mode(wp); break; ! case MODEKEYCMD_CHOOSE: item = &ARRAY_ITEM(&data->list, data->selected); data->callbackfn(data->data, item->idx); window_pane_reset_mode(wp); break; ! case MODEKEYCMD_UP: if (items == 0) break; if (data->selected == 0) { --- 177,192 ---- items = ARRAY_LENGTH(&data->list); switch (mode_key_lookup(&data->mdata, key)) { ! case MODEKEYCHOICE_CANCEL: data->callbackfn(data->data, -1); window_pane_reset_mode(wp); break; ! case MODEKEYCHOICE_CHOOSE: item = &ARRAY_ITEM(&data->list, data->selected); data->callbackfn(data->data, item->idx); window_pane_reset_mode(wp); break; ! case MODEKEYCHOICE_UP: if (items == 0) break; if (data->selected == 0) { *************** *** 205,211 **** screen_write_stop(&ctx); } break; ! case MODEKEYCMD_DOWN: if (items == 0) break; if (data->selected == items - 1) { --- 208,214 ---- screen_write_stop(&ctx); } break; ! case MODEKEYCHOICE_DOWN: if (items == 0) break; if (data->selected == items - 1) { *************** *** 215,220 **** --- 218,224 ---- break; } data->selected++; + if (data->selected >= data->top + screen_size_y(&data->screen)) window_choose_scroll_down(wp); else { *************** *** 226,232 **** screen_write_stop(&ctx); } break; ! case MODEKEYCMD_PREVIOUSPAGE: if (data->selected < screen_size_y(s)) { data->selected = 0; data->top = 0; --- 230,236 ---- screen_write_stop(&ctx); } break; ! case MODEKEYCHOICE_PAGEUP: if (data->selected < screen_size_y(s)) { data->selected = 0; data->top = 0; *************** *** 239,245 **** } window_choose_redraw_screen(wp); break; ! case MODEKEYCMD_NEXTPAGE: data->selected += screen_size_y(s); if (data->selected > items - 1) data->selected = items - 1; --- 243,249 ---- } window_choose_redraw_screen(wp); break; ! case MODEKEYCHOICE_PAGEDOWN: data->selected += screen_size_y(s); if (data->selected > items - 1) data->selected = items - 1;