summaryrefslogtreecommitdiffstats
path: root/tty-keys.c
diff options
context:
space:
mode:
authornicm <nicm>2017-08-29 09:18:48 +0000
committernicm <nicm>2017-08-29 09:18:48 +0000
commit9852bd743c9bf1029990538f2d89cfa1450fb54c (patch)
treef3cdc3d926bee3cf772b605043111104fc6d9a89 /tty-keys.c
parentfe4467ad2bf7b37a12330ed0a147e7230d60179a (diff)
Check for complete keys before escape prefix, allows keys to be defined
with a leading escape. GitHub issue 1048.
Diffstat (limited to 'tty-keys.c')
-rw-r--r--tty-keys.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/tty-keys.c b/tty-keys.c
index 6e02bdc1..7c0455f0 100644
--- a/tty-keys.c
+++ b/tty-keys.c
@@ -595,7 +595,17 @@ tty_keys_next(struct tty *tty)
}
first_key:
- /* Handle keys starting with escape. */
+ /* Try to lookup complete key. */
+ n = tty_keys_next1(tty, buf, len, &key, &size, expired);
+ if (n == 0) /* found */
+ goto complete_key;
+ if (n == 1)
+ goto partial_key;
+
+ /*
+ * If not a complete key, look for key with an escape prefix (meta
+ * modifier).
+ */
if (*buf == '\033') {
/* Look for a key without the escape. */
n = tty_keys_next1(tty, buf + 1, len - 1, &key, &size, expired);
@@ -620,13 +630,6 @@ first_key:
goto partial_key;
}
- /* Try to lookup key. */
- n = tty_keys_next1(tty, buf, len, &key, &size, expired);
- if (n == 0) /* found */
- goto complete_key;
- if (n == 1)
- goto partial_key;
-
/*
* At this point, we know the key is not partial (with or without
* escape). So pass it through even if the timer has not expired.