paranoid_confirm menu

In the paranoid_confirm submenu for 'm O', dynamically substitute the
correct key into the description of the 'swim' choice if #reqmenu is
bound to something other than 'm'.
This commit is contained in:
PatR
2023-06-30 16:44:14 -07:00
parent 9212ae75f8
commit b05bc01061

View File

@@ -5594,6 +5594,8 @@ handler_paranoid_confirmation(void)
winid tmpwin;
anything any;
int i;
char mkey, mbuf[QBUFSZ], ebuf[QBUFSZ], cbuf[QBUFSZ];
const char *explain, *cmdnm;
menu_item *paranoia_picks = (menu_item *) 0;
int clr = 0;
@@ -5603,9 +5605,25 @@ handler_paranoid_confirmation(void)
for (i = 0; paranoia[i].flagmask != 0; ++i) {
if (paranoia[i].flagmask == PARANOID_BONES && !wizard)
continue;
/* the 'swim' choice mentions the 'm' movement prefix in its
explanation; if that's been bound to something else or been
unbound altogether, substitute the replacement in the text */
explain = paranoia[i].explain;
if (strstri(explain, "'m'")
&& (mkey = cmd_from_func(do_reqmenu)) != 'm') {
if (mkey) { /* key for 'm' prefix */
Sprintf(mbuf, "'%.9s'", visctrl(mkey)); /* .5 is enough */
} else { /* extended command name for 'm' prefix */
cmdnm = cmdname_from_func(do_reqmenu, cbuf, TRUE);
if (!cmdnm)
cmdnm = "reqmenu";
Sprintf(mbuf, "'%s%.31s'", (*cmdnm != '#') ? "#" : "", cmdnm);
}
explain = strsubst(strcpy(ebuf, explain), "'m'", mbuf);
}
any.a_int = paranoia[i].flagmask;
add_menu(tmpwin, &nul_glyphinfo, &any, *paranoia[i].argname,
0, ATR_NONE, clr, paranoia[i].explain,
0, ATR_NONE, clr, explain,
(flags.paranoia_bits & paranoia[i].flagmask)
? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);