mirror of
https://github.com/irssi/irssi.git
synced 2024-12-04 14:46:39 -05:00
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.
This commit is contained in:
parent
cb6266f212
commit
09f23d06b5
@ -292,12 +292,18 @@ static int expand_key(const char *key, GSList **out)
|
||||
}
|
||||
last_hyphen = !last_hyphen;
|
||||
} else if (*key == '^') {
|
||||
/* ctrl-code */
|
||||
if (key[1] != '\0')
|
||||
key++;
|
||||
|
||||
expand_out_char(*out, '^');
|
||||
expand_out_char(*out, *key);
|
||||
|
||||
/* ctrl-code */
|
||||
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, '-');
|
||||
last_hyphen = FALSE; /* optional */
|
||||
} else if (last_hyphen && i_isalpha(*key)) {
|
||||
|
@ -393,8 +393,8 @@ static void sig_gui_key_pressed(gpointer keyp)
|
||||
}
|
||||
|
||||
if (strcmp(str, "^") == 0) {
|
||||
/* change it as ^^ */
|
||||
str[1] = '^';
|
||||
/* change it as ^-, that is an invalid control char */
|
||||
str[1] = '-';
|
||||
str[2] = '\0';
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user