summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/main.c b/main.c
index be91d68..5d1ef41 100644
--- a/main.c
+++ b/main.c
@@ -504,6 +504,7 @@ 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,6 +524,17 @@ 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'))
{
@@ -545,8 +557,6 @@ void on_keypress(XKeyEvent *kev)
break;
}
}
- if (i == ARRLEN(keys))
- run_key_handler(XKeysymToString(ksym), kev->state & ~sh);
prefix = 0;
}