summaryrefslogtreecommitdiff
path: root/src/fe-common/core
diff options
context:
space:
mode:
authorAilin Nemui <ailin@esf51.localdomain>2014-07-28 13:58:13 +0200
committerAilin Nemui <ailin@esf51.localdomain>2014-07-28 13:58:13 +0200
commit09f23d06b5262c53b65fa04d4f83cfd170d919c5 (patch)
tree9869ce2e38775240b5b7a79845c5b35026bdfa31 /src/fe-common/core
parentcb6266f212e35c4ebe954f89cdd0230cf6ec3aba (diff)
downloadirssi-09f23d06b5262c53b65fa04d4f83cfd170d919c5.zip
Modify escape of ^ key so it can be used as well as Ctrl+^
Fixes FS#721 This makes Ctrl+^ and ^ bindable again as different keys. We do this by escaping single `^` as `^-`, which is not a valid control character (unlike `^^`) The original approach suggested in FS#721 is insufficient, it will break bindings such as `meta-^` because Irssi is convinced that `^` introduces a Control-key ("key combo") so it is waiting for what may follow.
Diffstat (limited to 'src/fe-common/core')
-rw-r--r--src/fe-common/core/keyboard.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/fe-common/core/keyboard.c b/src/fe-common/core/keyboard.c
index 00454401..bec1502e 100644
--- a/src/fe-common/core/keyboard.c
+++ b/src/fe-common/core/keyboard.c
@@ -292,12 +292,18 @@ static int expand_key(const char *key, GSList **out)
}
last_hyphen = !last_hyphen;
} else if (*key == '^') {
+ expand_out_char(*out, '^');
+
/* ctrl-code */
- if (key[1] != '\0')
+ if (key[1] != '\0' && key[1] != '-') {
key++;
+ expand_out_char(*out, *key);
+ }
+ else {
+ /* escaped syntax for ^, see gui-readline.c */
+ expand_out_char(*out, '-');
+ }
- expand_out_char(*out, '^');
- expand_out_char(*out, *key);
expand_out_char(*out, '-');
last_hyphen = FALSE; /* optional */
} else if (last_hyphen && i_isalpha(*key)) {