From d119eca297c1818745c2462af4ffa5b78e9d1807 Mon Sep 17 00:00:00 2001 From: PatR Date: Mon, 24 Sep 2018 17:06:04 -0700 Subject: [PATCH] simplify #wizidentify Get rid of bold/non-bold distinction in #wizidentify inventory menu by only showing items which aren't yet fully identified instead of full inventory with bold for unID'd. Support for bold text might be lacking. I was considering this even before the report that X11 menus ignore attribute. The "_ - (use ^I for all)" menu entry is still present, but it could be discarded in favor of '.' to pick everything via ordinary menu selection. --- doc/fixes36.2 | 5 +++-- src/cmd.c | 9 +++------ src/invent.c | 44 ++++++++++++++++++++++---------------------- 3 files changed, 28 insertions(+), 30 deletions(-) diff --git a/doc/fixes36.2 b/doc/fixes36.2 index 479c7287b..51e27582f 100644 --- a/doc/fixes36.2 +++ b/doc/fixes36.2 @@ -150,14 +150,15 @@ fix access violation when --debug:xxxx has no other args after it setting the inverse attribute for gold had the space before "$:" getting highlighted along with the gold field sortloot segfaulted when filtering a subset of items (seen with 'A' command) +orctown: prevent Bad fruit #0 and some minor tuning +make long extended commands list be more navigable +simplify #wizidentify; don't rely on having bold menu entries tty: turn off an optimization that is the suspected cause of Windows reported partial status lines following level changes tty: ensure that current status fields are always copied to prior status values so that comparisons are correct -orctown: prevent Bad fruit #0 and some minor tuning X11: its use of genl_status_update exposed a negative index use that could lead to a segfault -make long extended commands list be more navigable Platform- and/or Interface-Specific Fixes diff --git a/src/cmd.c b/src/cmd.c index c698b0647..d52535667 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -747,14 +747,11 @@ wiz_identify(VOID_ARGS) /* command remapping might leave #wizidentify as the only way to invoke us, in which case cmd_from_func() will yield NUL; it won't matter to display_inventory()/display_pickinv() - if ^I invokes some other command--what matters is that it - is never an inventory letter */ + if ^I invokes some other command--what matters is that + display_pickinv() and xname() see override_ID as nonzero */ if (!iflags.override_ID) iflags.override_ID = C('I'); - /* C('I') == ^I == default keystroke for wiz_identify; - it doesn't matter whether the command has been remapped */ - if (display_inventory((char *) 0, TRUE) == C('I')) - identify_pack(0, FALSE); + (void) display_inventory((char *) 0, FALSE); iflags.override_ID = 0; } else pline("Unavailable command '%s'.", diff --git a/src/invent.c b/src/invent.c index 4262a5153..84e6367df 100644 --- a/src/invent.c +++ b/src/invent.c @@ -2593,24 +2593,27 @@ long *out_cnt; char prompt[QBUFSZ]; unid_cnt = count_unidentified(invent); - add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, - "Debug Identify", - MENU_UNSELECTED); + Sprintf(prompt, "Debug Identify"); /* 'title' rather than 'prompt' */ + if (unid_cnt) + Sprintf(eos(prompt), + " -- unidentified or partially identified item%s", + plur(unid_cnt)); + add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, prompt, MENU_UNSELECTED); if (!unid_cnt) { add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "(all items are permanently identified already)", MENU_UNSELECTED); } else { any.a_obj = &wizid_fakeobj; + Sprintf(prompt, "select %s to permanently identify", + (unid_cnt == 1) ? "it": "any or all of them"); /* wiz_identify stuffed the wiz_identify command character (^I) into iflags.override_ID for our use as an accelerator; - it could be ambiguous as a selector but the only time it - is wanted is in case where no item is being selected */ - Sprintf(prompt, - "Select %sthe %d bolded item%s to permanently identify (%s for all)", - (unid_cnt == 1) ? "": "any of ", unid_cnt, - (unid_cnt > 1) ? "s" : "", - visctrl(iflags.override_ID)); + it could be ambiguous if player has assigned a letter to + the #wizidentify command */ + if (unid_cnt > 1) + Sprintf(eos(prompt), " (%s for all)", + visctrl(iflags.override_ID)); add_menu(win, NO_GLYPH, &any, '_', iflags.override_ID, ATR_NONE, prompt, MENU_UNSELECTED); wizid = TRUE; @@ -2630,6 +2633,8 @@ nextclass: if (lets && !index(lets, otmp->invlet)) continue; if (!flags.sortpack || otmp->oclass == *invlet) { + if (wizid && !not_fully_identified(otmp)) + continue; any = zeroany; /* all bits zero */ ilet = otmp->invlet; if (flags.sortpack && !classcount) { @@ -2643,9 +2648,7 @@ nextclass: any.a_obj = otmp; else any.a_char = ilet; - add_menu(win, obj_to_glyph(otmp), &any, ilet, 0, - (wizid && not_fully_identified(otmp)) ? - ATR_BOLD : ATR_NONE, + add_menu(win, obj_to_glyph(otmp), &any, ilet, 0, ATR_NONE, doname(otmp), MENU_UNSELECTED); } } @@ -2678,21 +2681,18 @@ nextclass: } end_menu(win, query && *query ? query : (char *) 0); - n = select_menu(win, wizid ? PICK_ANY : - want_reply ? PICK_ONE : PICK_NONE, &selected); + n = select_menu(win, + wizid ? PICK_ANY : want_reply ? PICK_ONE : PICK_NONE, + &selected); if (n > 0) { if (wizid) { - int i = n; + int i; ret = '\0'; - while (--i >= 0) { + for (i = 0; i < n; ++i) { otmp = selected[i].item.a_obj; if (otmp == &wizid_fakeobj) { - /* C('I') == ^I == default keystroke for wiz_identify; - it is guaranteed not to be in use as an inventory letter - (wiz_identify might be remapped to an ordinary letter, - making iflags.override_ID ambiguous as a return value) */ - ret = C('I'); + identify_pack(0, FALSE); } else { if (not_fully_identified(otmp)) (void) identify(otmp); -- 2.40.0