aboutsummaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c29
1 files changed, 9 insertions, 20 deletions
diff --git a/main.c b/main.c
index 5d1ef41..f95b4f4 100644
--- a/main.c
+++ b/main.c
@@ -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)