more command prefix handling

When a command doesn't allow a prefix, go back to showing the prefix
keystroke in the can't-do-that feedback rather than the command name
that it has for potential binding.  I went away from that earlier
after typing 'G' followed by 'o' and getting "the open command does
not accept 5 prefix" instead of "G prefix".

Fix the lookup routine which was responsible for that.  At least
partially fix it; actually it only ignores digits for !numpad.  If a
numpad user types G where it isn't allowed, the feedback will still
be about 5 instead of G.  The code is going from keystroke-used to
command-it-invokes back to keystroke-for-command which won't
necessarily yield the original keystroke because a command can be
bound to more than one key.
This commit is contained in:
PatR
2022-02-06 18:09:23 -08:00
parent b3c5d68399
commit 568ba7b305

View File

@@ -2905,6 +2905,11 @@ cmd_from_func(int (*fn)(void))
keystroke invokes space's command */
if (i == ' ')
continue;
/* skip digits if number_pad is Off; also skip '-' unless it has
been bound to something other than what number_pad assigns */
if (((i >= '0' && i <= '9') || (i == '-' && fn == do_fight))
&& !g.Cmd.num_pad)
continue;
if (g.Cmd.commands[i] && g.Cmd.commands[i]->ef_funct == fn)
return (char) i;
@@ -3848,11 +3853,13 @@ rhack(char *cmd)
&& !(tlist->flags & (PREFIXCMD | MOVEMENTCMD))
&& (!was_m_prefix || !accept_menu_prefix(tlist))) {
const char *which;
char pfxidx = cmd_from_func(prefix_seen->ef_funct);
/* got prefix previously but this command doesn't accept one */
which = (prefix_seen->ef_funct == do_reqmenu)
? "move-no-pickup or request-menu"
: prefix_seen->ef_txt;
which = (pfxidx != 0) ? visctrl(pfxidx)
: (prefix_seen->ef_funct == do_reqmenu)
? "move-no-pickup or request-menu"
: prefix_seen->ef_txt;
pline("The %s command does not accept %s prefix.",
tlist->ef_txt, which);