mirror of
https://github.com/irssi/irssi.git
synced 2026-08-19 08:32:07 +02: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
2 changed files with 11 additions and 5 deletions
|
|
@ -292,12 +292,18 @@ static int expand_key(const char *key, GSList **out)
|
||||||
}
|
}
|
||||||
last_hyphen = !last_hyphen;
|
last_hyphen = !last_hyphen;
|
||||||
} else if (*key == '^') {
|
} else if (*key == '^') {
|
||||||
/* ctrl-code */
|
|
||||||
if (key[1] != '\0')
|
|
||||||
key++;
|
|
||||||
|
|
||||||
expand_out_char(*out, '^');
|
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, '-');
|
expand_out_char(*out, '-');
|
||||||
last_hyphen = FALSE; /* optional */
|
last_hyphen = FALSE; /* optional */
|
||||||
} else if (last_hyphen && i_isalpha(*key)) {
|
} else if (last_hyphen && i_isalpha(*key)) {
|
||||||
|
|
|
||||||
|
|
@ -393,8 +393,8 @@ static void sig_gui_key_pressed(gpointer keyp)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(str, "^") == 0) {
|
if (strcmp(str, "^") == 0) {
|
||||||
/* change it as ^^ */
|
/* change it as ^-, that is an invalid control char */
|
||||||
str[1] = '^';
|
str[1] = '-';
|
||||||
str[2] = '\0';
|
str[2] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue