Updates for UTF-8 key bindings

Code point mapping adjusted for multibyte characters to avoid the
ncurses range 0-KEY_MAX.

This includes three fixes:

1) test sequence in keys_assign_binding(),
2) reassemble multi-byte character in keys_wgetch(),
3) check for already in use in keys_assign_binding().

Rearrangement of code. The introduction of allocated memory in
keys_int2str() has as a consequence that check for recognized ncurses
pseudo characters now are in two places: keys_str2int() and
custom_keys_config(). The latter was moved from keys_wgetch() to improve
user information.

More informative warning messages in custom_keys_config().

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This commit is contained in:
Lars Henriksen
2017-09-27 21:45:33 +02:00
committed by Lukas Fleischer
parent efd76a0d99
commit dd5af2f7f4
2 changed files with 39 additions and 39 deletions

View File

@@ -998,11 +998,14 @@ void custom_keys_config(void)
keys_get_label(selrow), 0);
ch = keys_wgetch(grabwin);
/* First check if this key would be recognized by calcurse. */
if (ch < 0) {
/* Check if this is a ncurses pseudo key accepted by calcurse. */
if (ch >= KEY_MIN && ch <= KEY_MAX && !(
ch == KEY_UP || ch == KEY_DOWN ||
ch == KEY_LEFT || ch == KEY_RIGHT ||
ch == KEY_HOME || ch == KEY_END)) {
not_recognized = 1;
WARN_MSG(_("This key is not yet recognized by calcurse, "
"please choose another one."));
WARN_MSG(_("The key '%s' is not accepted by calcurse. "
"Choose another one."), keyname(ch));
werase(kwin.inner);
nbrowelm =
print_keys_bindings(kwin.inner,
@@ -1026,9 +1029,12 @@ void custom_keys_config(void)
enum key action;
action = keys_get_action(ch);
WARN_MSG(_("This key is already in use for %s, "
"please choose another one."),
char *keystr = keys_int2str(ch);
WARN_MSG(_("The key '%s' is already used for %s. "
"Choose another one."),
keystr,
keys_get_label(action));
mem_free(keystr);
werase(kwin.inner);
nbrowelm =
print_keys_bindings(kwin.inner,