Add count buffer to keys_getch()

Key commands can be prefixed with a natural number - keys_getch() will
store this number in the buffer pointed to by the second parameter. Set
this parameter to NULL to disable count prefixes.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
Lukas Fleischer 2011-10-04 00:13:09 +00:00
parent ba2aa5167b
commit 98651a549f
5 changed files with 27 additions and 12 deletions

View File

@ -186,7 +186,7 @@ main (int argc, char **argv)
wins_reset ();
}
key = keys_getch (win[STA].p);
key = keys_getch (win[STA].p, NULL);
switch (key)
{
case KEY_GENERIC_REDRAW:

View File

@ -712,7 +712,7 @@ void keys_free (void);
void keys_dump_defaults (char *);
char *keys_get_label (enum key);
enum key keys_get_action (int);
enum key keys_getch (WINDOW *win);
enum key keys_getch (WINDOW *win, int *);
int keys_assign_binding (int, enum key);
void keys_remove_binding (int, enum key);
int keys_str2int (char *);

View File

@ -390,7 +390,7 @@ custom_load_conf (struct conf *conf)
status_mesg (mesg_line1, mesg_line2);
wnoutrefresh (win[STA].p);
wins_doupdate ();
(void)keys_getch (win[STA].p);
(void)keys_getch (win[STA].p, NULL);
}
pthread_mutex_lock (&nbar.mutex);
@ -579,7 +579,7 @@ custom_layout_config (void)
display_layout_config (&conf_win, mark, cursor);
clear ();
while ((ch = keys_getch (win[STA].p)) != KEY_GENERIC_QUIT)
while ((ch = keys_getch (win[STA].p, NULL)) != KEY_GENERIC_QUIT)
{
need_reset = 0;
switch (ch)
@ -663,7 +663,7 @@ custom_sidebar_config (void)
keys_display_bindings_bar (win[STA].p, binding, 0, binding_size);
wins_doupdate ();
while ((ch = keys_getch (win[STA].p)) != KEY_GENERIC_QUIT)
while ((ch = keys_getch (win[STA].p, NULL)) != KEY_GENERIC_QUIT)
{
switch (ch)
{
@ -902,7 +902,7 @@ custom_color_config (void)
display_color_config (&conf_win, &mark_fore, &mark_back, cursor, theme_changed);
clear ();
while ((ch = keys_getch (win[STA].p)) != KEY_GENERIC_QUIT)
while ((ch = keys_getch (win[STA].p, NULL)) != KEY_GENERIC_QUIT)
{
need_reset = 0;
theme_changed = 0;
@ -1379,7 +1379,7 @@ custom_keys_config (void)
{
int ch;
ch = keys_getch (win[STA].p);
ch = keys_getch (win[STA].p, NULL);
switch (ch)
{
case KEY_MOVE_UP:

View File

@ -792,7 +792,7 @@ help_screen (void)
}
wins_scrollwin_display (&hwin);
ch = keys_getch (win[STA].p);
ch = keys_getch (win[STA].p, NULL);
}
wins_scrollwin_delete (&hwin);
if (need_resize)

View File

@ -194,11 +194,26 @@ keys_get_action (int pressed)
}
enum key
keys_getch (WINDOW *win)
keys_getch (WINDOW *win, int *count)
{
int ch;
int ch = '0';
if (count)
{
*count = 0;
do
{
*count = *count * 10 + ch - '0';
ch = wgetch (win);
}
while ((ch == '0' && *count > 0) || (ch >= '1' && ch <= '9'));
if (*count == 0)
*count = 1;
}
else
ch = wgetch (win);
ch = wgetch (win);
switch (ch)
{
case KEY_RESIZE:
@ -586,7 +601,7 @@ keys_popup_info (enum key key)
#define WINCOL (col - 4)
infowin = popup (WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2,
keydef[key].label, info[key], 1);
(void)keys_getch (infowin);
(void)keys_getch (infowin, NULL);
delwin (infowin);
#undef WINROW
#undef WINCOL