From 3296fc729e8e3a4b7febd0ba325f5cb9558de66d Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Sat, 8 Apr 2023 11:24:43 +0300 Subject: [PATCH] cmd_from_func prefers printable key over ctrl combination If command is bound to multiple keys (like #kick), cmd_from_func prefers to return the key in the printable range over a ctrl-key combo. --- src/cmd.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/cmd.c b/src/cmd.c index 08ad9efa3..fab77c5a5 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -3598,10 +3598,12 @@ cmd_from_dir(int dir, int mode) return cmd_from_func(move_funcs[dir][mode]); } +/* return the key bound to extended command */ char cmd_from_func(int (*fn)(void)) { int i; + char ret = '\0'; /* skip NUL; allowing it would wreak havoc */ for (i = 1; i < 256; ++i) { @@ -3615,12 +3617,17 @@ cmd_from_func(int (*fn)(void)) && !gc.Cmd.num_pad) continue; - if (gc.Cmd.commands[i] && gc.Cmd.commands[i]->ef_funct == fn) - return (char) i; + if (gc.Cmd.commands[i] && gc.Cmd.commands[i]->ef_funct == fn) { + if (i >= ' ' && i <= '~') + return (char) i; + else { + ret = (char) i; + } + } } if (gc.Cmd.commands[' '] && gc.Cmd.commands[' ']->ef_funct == fn) return ' '; - return '\0'; + return ret; } /* return visual interpretation of the key bound to extended command,