summaryrefslogtreecommitdiffstats
path: root/key-string.c
diff options
context:
space:
mode:
authornicm <nicm>2015-12-12 18:19:00 +0000
committernicm <nicm>2015-12-12 18:19:00 +0000
commit39cf9c9d31954198ad73e2b6721a92fe782ee56c (patch)
tree8b2a0238d0d1ccf01232a2f45560dd5b0c9259fe /key-string.c
parent88bc8f3528b973adb17f541e21aa415923a10f1e (diff)
Allow prefix and prefix2 to be set to None to disable (useful if you
would rather bind the prefix in the root table).
Diffstat (limited to 'key-string.c')
-rw-r--r--key-string.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/key-string.c b/key-string.c
index 9a44892d..1ff3ca30 100644
--- a/key-string.c
+++ b/key-string.c
@@ -22,8 +22,8 @@
#include "tmux.h"
-key_code key_string_search_table(const char *);
-key_code key_string_get_modifiers(const char **);
+static key_code key_string_search_table(const char *);
+static key_code key_string_get_modifiers(const char **);
const struct {
const char *string;
@@ -98,7 +98,7 @@ const struct {
};
/* Find key string in table. */
-key_code
+static key_code
key_string_search_table(const char *string)
{
u_int i;
@@ -107,11 +107,11 @@ key_string_search_table(const char *string)
if (strcasecmp(string, key_string_table[i].string) == 0)
return (key_string_table[i].key);
}
- return (KEYC_NONE);
+ return (KEYC_UNKNOWN);
}
/* Find modifiers. */
-key_code
+static key_code
key_string_get_modifiers(const char **string)
{
key_code modifiers;
@@ -150,10 +150,14 @@ key_string_lookup_string(const char *string)
u_int i;
enum utf8_state more;
+ /* Is this no key? */
+ if (strcasecmp(string, "None") == 0)
+ return (KEYC_NONE);
+
/* Is this a hexadecimal value? */
if (string[0] == '0' && string[1] == 'x') {
if (sscanf(string + 2, "%hx%n", &u, &size) != 1 || size > 4)
- return (KEYC_NONE);
+ return (KEYC_UNKNOWN);
return (u);
}
@@ -165,30 +169,30 @@ key_string_lookup_string(const char *string)
}
modifiers |= key_string_get_modifiers(&string);
if (string[0] == '\0')
- return (KEYC_NONE);
+ return (KEYC_UNKNOWN);
/* Is this a standard ASCII key? */
if (string[1] == '\0' && (u_char)string[0] <= 127) {
key = (u_char)string[0];
if (key < 32 || key == 127)
- return (KEYC_NONE);
+ return (KEYC_UNKNOWN);
} else {
/* Try as a UTF-8 key. */
if ((more = utf8_open(&ud, (u_char)*string)) == UTF8_MORE) {
if (strlen(string) != ud.size)
- return (KEYC_NONE);
+ return (KEYC_UNKNOWN);
for (i = 1; i < ud.size; i++)
more = utf8_append(&ud, (u_char)string[i]);
if (more != UTF8_DONE)
- return (KEYC_NONE);
+ return (KEYC_UNKNOWN);
key = utf8_combine(&ud);
return (key | modifiers);
}
/* Otherwise look the key up in the table. */
key = key_string_search_table(string);
- if (key == KEYC_NONE)
- return (KEYC_NONE);
+ if (key == KEYC_UNKNOWN)
+ return (KEYC_UNKNOWN);
}
/* Convert the standard control keys. */
@@ -202,7 +206,7 @@ key_string_lookup_string(const char *string)
else if (key == 63)
key = KEYC_BSPACE;
else
- return (KEYC_NONE);
+ return (KEYC_UNKNOWN);
modifiers &= ~KEYC_CTRL;
}
@@ -222,9 +226,13 @@ key_string_lookup_key(key_code key)
/* Handle no key. */
if (key == KEYC_NONE)
- return ("<NONE>");
+ return ("None");
+
+ /* Handle special keys. */
+ if (key == KEYC_UNKNOWN)
+ return ("Unknown");
if (key == KEYC_MOUSE)
- return ("<MOUSE>");
+ return ("Mouse");
/*
* Special case: display C-@ as C-Space. Could do this below in
@@ -265,7 +273,7 @@ key_string_lookup_key(key_code key)
/* Invalid keys are errors. */
if (key == 127 || key > 255) {
- snprintf(out, sizeof out, "<INVALID#%llx>", key);
+ snprintf(out, sizeof out, "Invalid#%llx", key);
return (out);
}