version 1.4, 2009/07/27 18:51:46 |
version 1.5, 2009/07/27 19:29:35 |
|
|
{ |
{ |
struct window_choose_mode_data *data; |
struct window_choose_mode_data *data; |
struct screen *s; |
struct screen *s; |
|
int keys; |
|
|
wp->modedata = data = xmalloc(sizeof *data); |
wp->modedata = data = xmalloc(sizeof *data); |
|
|
|
|
s->mode &= ~MODE_CURSOR; |
s->mode &= ~MODE_CURSOR; |
s->mode |= MODE_MOUSE; |
s->mode |= MODE_MOUSE; |
|
|
mode_key_init(&data->mdata, |
keys = options_get_number(&wp->window->options, "mode-keys"); |
options_get_number(&wp->window->options, "mode-keys"), |
if (keys == MODEKEY_EMACS) |
MODEKEY_CHOOSEMODE); |
mode_key_init(&data->mdata, mode_key_emacs_choice); |
|
else |
|
mode_key_init(&data->mdata, mode_key_vi_choice); |
|
|
return (s); |
return (s); |
} |
} |
|
|
items = ARRAY_LENGTH(&data->list); |
items = ARRAY_LENGTH(&data->list); |
|
|
switch (mode_key_lookup(&data->mdata, key)) { |
switch (mode_key_lookup(&data->mdata, key)) { |
case MODEKEYCMD_QUIT: |
case MODEKEYCHOICE_CANCEL: |
data->callbackfn(data->data, -1); |
data->callbackfn(data->data, -1); |
window_pane_reset_mode(wp); |
window_pane_reset_mode(wp); |
break; |
break; |
case MODEKEYCMD_CHOOSE: |
case MODEKEYCHOICE_CHOOSE: |
item = &ARRAY_ITEM(&data->list, data->selected); |
item = &ARRAY_ITEM(&data->list, data->selected); |
data->callbackfn(data->data, item->idx); |
data->callbackfn(data->data, item->idx); |
window_pane_reset_mode(wp); |
window_pane_reset_mode(wp); |
break; |
break; |
case MODEKEYCMD_UP: |
case MODEKEYCHOICE_UP: |
if (items == 0) |
if (items == 0) |
break; |
break; |
if (data->selected == 0) { |
if (data->selected == 0) { |
|
|
screen_write_stop(&ctx); |
screen_write_stop(&ctx); |
} |
} |
break; |
break; |
case MODEKEYCMD_DOWN: |
case MODEKEYCHOICE_DOWN: |
if (items == 0) |
if (items == 0) |
break; |
break; |
if (data->selected == items - 1) { |
if (data->selected == items - 1) { |
|
|
break; |
break; |
} |
} |
data->selected++; |
data->selected++; |
|
|
if (data->selected >= data->top + screen_size_y(&data->screen)) |
if (data->selected >= data->top + screen_size_y(&data->screen)) |
window_choose_scroll_down(wp); |
window_choose_scroll_down(wp); |
else { |
else { |
|
|
screen_write_stop(&ctx); |
screen_write_stop(&ctx); |
} |
} |
break; |
break; |
case MODEKEYCMD_PREVIOUSPAGE: |
case MODEKEYCHOICE_PAGEUP: |
if (data->selected < screen_size_y(s)) { |
if (data->selected < screen_size_y(s)) { |
data->selected = 0; |
data->selected = 0; |
data->top = 0; |
data->top = 0; |
|
|
} |
} |
window_choose_redraw_screen(wp); |
window_choose_redraw_screen(wp); |
break; |
break; |
case MODEKEYCMD_NEXTPAGE: |
case MODEKEYCHOICE_PAGEDOWN: |
data->selected += screen_size_y(s); |
data->selected += screen_size_y(s); |
if (data->selected > items - 1) |
if (data->selected > items - 1) |
data->selected = items - 1; |
data->selected = items - 1; |