From dd5af2f7f407595ab00c02b705c2696e12dbbe36 Mon Sep 17 00:00:00 2001 From: Lars Henriksen Date: Wed, 27 Sep 2017 21:45:33 +0200 Subject: 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 --- src/custom.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'src/custom.c') diff --git a/src/custom.c b/src/custom.c index 4d02b4f..b8b3553 100644 --- a/src/custom.c +++ b/src/custom.c @@ -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, -- cgit v1.2.3-54-g00ecf