diff options
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 29 |
1 files changed, 9 insertions, 20 deletions
@@ -75,6 +75,7 @@ int filecnt, fileidx; int alternate; int prefix; +bool extprefix; bool resized = false; @@ -504,7 +505,6 @@ void run_key_handler(const char *key, unsigned int mask) void on_keypress(XKeyEvent *kev) { - static bool seen_prefix_key = false; int i; unsigned int sh; KeySym ksym, shksym; @@ -523,27 +523,16 @@ void on_keypress(XKeyEvent *kev) if (IsModifierKey(ksym)) return; - - if (seen_prefix_key) { - seen_prefix_key = false; - if (!(MODMASK(kev->state) == 0 && ksym == XK_Escape)) - run_key_handler(XKeysymToString(ksym), kev->state & ~sh); - return; - } else if (MODMASK(kev->state) == PREFIX_KEYMASK && ksym == PREFIX_KEYSYM) { - seen_prefix_key = true; - prefix = 0; - return; - } - - if ((ksym == XK_Escape && MODMASK(kev->state) == 0) || - (key >= '0' && key <= '9')) - { + if (ksym == XK_Escape && MODMASK(kev->state) == 0) { + extprefix = False; + } else if (extprefix) { + run_key_handler(XKeysymToString(ksym), kev->state & ~sh); + extprefix = False; + } else if (key >= '0' && key <= '9') { /* number prefix for commands */ - prefix = ksym == XK_Escape ? 0 : prefix * 10 + (int) (key - '0'); + prefix = prefix * 10 + (int) (key - '0'); return; - } - - for (i = 0; i < ARRLEN(keys); i++) { + } else for (i = 0; i < ARRLEN(keys); i++) { if (keys[i].ksym == ksym && MODMASK(keys[i].mask | sh) == MODMASK(kev->state) && keys[i].cmd != NULL) |