summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/tmux/tty-keys.c58
1 files changed, 24 insertions, 34 deletions
diff --git a/usr.bin/tmux/tty-keys.c b/usr.bin/tmux/tty-keys.c
index 277377eacf6..a86cebf2d3e 100644
--- a/usr.bin/tmux/tty-keys.c
+++ b/usr.bin/tmux/tty-keys.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty-keys.c,v 1.88 2016/04/27 16:46:21 nicm Exp $ */
+/* $OpenBSD: tty-keys.c,v 1.89 2016/04/29 10:42:16 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -554,13 +554,6 @@ tty_keys_next(struct tty *tty)
first_key:
/* Handle keys starting with escape. */
if (*buf == '\033') {
- /* A single escape goes as-is if the timer has expired. */
- if (expired && len == 1) {
- key = '\033';
- size = 1;
- goto complete_key;
- }
-
/* Look for a key without the escape. */
n = tty_keys_next1(tty, buf + 1, len - 1, &key, &size, expired);
if (n == 0) { /* found */
@@ -570,36 +563,33 @@ first_key:
}
if (n == 1) /* partial */
goto partial_key;
+ }
- /* Try with the escape. */
- n = tty_keys_next1(tty, buf, len, &key, &size, expired);
- if (n == 0) /* found */
- goto complete_key;
- if (n == 1)
- 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;
- /* Is this an an xterm(1) key? */
- n = xterm_keys_find(buf, len, &size, &key);
- if (n == 0) /* found */
- goto complete_key;
- if (n == 1 && !expired)
- goto partial_key;
+ /* Is this an an xterm(1) key? */
+ n = xterm_keys_find(buf, len, &size, &key);
+ if (n == 0)
+ goto complete_key;
+ if (n == 1 && !expired)
+ goto partial_key;
- /*
- * If this is at least two keys, then it must be complete -
- * whether or not the timer has expired - otherwise
- * tty_keys_next1 would have returned a partial.
- */
- if (len >= 2) {
- key = (u_char)buf[1] | KEYC_ESCAPE;
- size = 2;
- goto complete_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.
+ */
+ if (*buf == '\033' && len >= 2) {
+ key = (u_char)buf[1] | KEYC_ESCAPE;
+ size = 2;
+ } else {
+ key = (u_char)buf[0];
+ size = 1;
}
-
- /* No longer key found, use the first character. */
- key = (u_char)*buf;
- size = 1;
goto complete_key;
partial_key: