From 7836298f296f8f41407dc4a6dbdb4aac1e3d4b96 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 25 Jun 2008 20:33:20 +0000 Subject: Allow use of alt keys. move-window command. --- key-string.c | 86 +++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 36 deletions(-) (limited to 'key-string.c') diff --git a/key-string.c b/key-string.c index e2d03a2f..605c982b 100644 --- a/key-string.c +++ b/key-string.c @@ -1,4 +1,4 @@ -/* $Id: key-string.c,v 1.5 2008-06-04 20:01:36 nicm Exp $ */ +/* $Id: key-string.c,v 1.6 2008-06-25 20:33:20 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -173,39 +173,7 @@ struct { { "SUNDO", KEYC_SUNDO }, { "SUSPEND", KEYC_SUSPEND }, { "UNDO", KEYC_UNDO }, - { "UP", KEYC_UP }, - { "^ ", 0 }, - { "^A", 1 }, - { "^B", 2 }, - { "^C", 3 }, - { "^D", 4 }, - { "^E", 5 }, - { "^F", 6 }, - { "^G", 7 }, - { "^H", 8 }, - { "^I", 9 }, - { "^J", 10 }, - { "^K", 11 }, - { "^L", 12 }, - { "^M", 13 }, - { "^N", 14 }, - { "^O", 15 }, - { "^P", 16 }, - { "^Q", 17 }, - { "^R", 18 }, - { "^S", 19 }, - { "^T", 20 }, - { "^U", 21 }, - { "^V", 22 }, - { "^W", 23 }, - { "^X", 24 }, - { "^Y", 25 }, - { "^Z", 26 }, - { "^[", 27 }, - { "^\\", 28 }, - { "^]", 29 }, - { "^^", 30 }, - { "^_", 31 } + { "UP", KEYC_UP } }; #define NKEYSTRINGS (sizeof key_string_table / sizeof key_string_table[0]) @@ -213,12 +181,39 @@ int key_string_lookup_string(const char *string) { u_int i; + int key; if (string[0] == '\0') return (KEYC_NONE); if (string[1] == '\0') return (string[0]); + if (string[0] == 'C' && string[1] == '-') { + if (string[2] == '\0' || string[3] != '\0') + return (KEYC_NONE); + if (string[2] >= 64 && string[2] <= 95) + return (string[2] - 64); + if (string[2] >= 97 && string[2] <= 122) + return (string[2] - 96); + return (KEYC_NONE); + } + + if (string[0] == '^') { + if (string[1] == '\0' || string[2] != '\0') + return (KEYC_NONE); + if (string[1] >= 64 && string[1] <= 95) + return (string[1] - 64); + if (string[1] >= 97 && string[1] <= 122) + return (string[1] - 96); + return (KEYC_NONE); + } + + if (string[0] == 'M' && string[1] == '-') { + if ((key = key_string_lookup_string(string + 2)) == KEYC_NONE) + return (KEYC_NONE); + return (KEYC_ADDESCAPE(key)); + } + for (i = 0; i < NKEYSTRINGS; i++) { if (strcasecmp(string, key_string_table[i].string) == 0) return (key_string_table[i].key); @@ -229,15 +224,34 @@ key_string_lookup_string(const char *string) const char * key_string_lookup_key(int key) { - static char tmp[2]; + static char tmp[24], tmp2[24]; + const char *s; u_int i; - if (key > 31 && key < 256) { + if (key == 127) + return (NULL); + + if (KEYC_ISESCAPE(key)) { + if ((s = key_string_lookup_key(KEYC_REMOVEESCAPE(key))) == NULL) + return (NULL); + xsnprintf(tmp2, sizeof tmp2, "M-%s", s); + return (tmp2); + } + + if (key >= 32 && key <= 255) { tmp[0] = key; tmp[1] = '\0'; return (tmp); } + if (key >= 0 && key <= 32) { + if (key == 0 || key > 26) + xsnprintf(tmp, sizeof tmp, "C-%c", 64 + key); + else + xsnprintf(tmp, sizeof tmp, "C-%c", 96 + key); + return (tmp); + } + for (i = 0; i < NKEYSTRINGS; i++) { if (key == key_string_table[i].key) return (key_string_table[i].string); -- cgit v1.2.3