From 54d7b7f20fc80460fb6160badb6d90e6505a4194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20Mohari?= Date: Fri, 31 Jan 2014 14:17:52 +0100 Subject: Use a prefix key to execute the key handler The default prefix key is C-x, and can be changed in config.def.h. The first key pressed after the prefix key will be passed the external key handler, unless the key is Escape, which is used to cancel the prefix. --- main.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'main.c') 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; } -- cgit v1.2.3