version 1.4, 2009/07/27 18:51:46 |
version 1.5, 2009/07/27 19:29:35 |
|
|
{ |
{ |
struct window_more_mode_data *data; |
struct window_more_mode_data *data; |
struct screen *s; |
struct screen *s; |
|
int keys; |
|
|
wp->modedata = data = xmalloc(sizeof *data); |
wp->modedata = data = xmalloc(sizeof *data); |
ARRAY_INIT(&data->list); |
ARRAY_INIT(&data->list); |
|
|
screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0); |
screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0); |
s->mode &= ~MODE_CURSOR; |
s->mode &= ~MODE_CURSOR; |
|
|
mode_key_init(&data->mdata, |
keys = options_get_number(&wp->window->options, "mode-keys"); |
options_get_number(&wp->window->options, "mode-keys"), 0); |
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); |
return (s); |
} |
} |
|
|
struct screen *s = &data->screen; |
struct screen *s = &data->screen; |
|
|
switch (mode_key_lookup(&data->mdata, key)) { |
switch (mode_key_lookup(&data->mdata, key)) { |
case MODEKEYCMD_QUIT: |
case MODEKEYCHOICE_CANCEL: |
window_pane_reset_mode(wp); |
window_pane_reset_mode(wp); |
break; |
break; |
case MODEKEYCMD_UP: |
case MODEKEYCHOICE_UP: |
window_more_scroll_up(wp); |
window_more_scroll_up(wp); |
break; |
break; |
case MODEKEYCMD_DOWN: |
case MODEKEYCHOICE_DOWN: |
window_more_scroll_down(wp); |
window_more_scroll_down(wp); |
break; |
break; |
case MODEKEYCMD_PREVIOUSPAGE: |
case MODEKEYCHOICE_PAGEUP: |
if (data->top < screen_size_y(s)) |
if (data->top < screen_size_y(s)) |
data->top = 0; |
data->top = 0; |
else |
else |
data->top -= screen_size_y(s); |
data->top -= screen_size_y(s); |
window_more_redraw_screen(wp); |
window_more_redraw_screen(wp); |
break; |
break; |
case MODEKEYCMD_NEXTPAGE: |
case MODEKEYCHOICE_PAGEDOWN: |
if (data->top + screen_size_y(s) > ARRAY_LENGTH(&data->list)) |
if (data->top + screen_size_y(s) > ARRAY_LENGTH(&data->list)) |
data->top = ARRAY_LENGTH(&data->list); |
data->top = ARRAY_LENGTH(&data->list); |
else |
else |