From: PatR Date: Fri, 11 Dec 2020 13:10:43 +0000 (-0800) Subject: add the hardcoded menu control keys to key help X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e2680bfc4a4014dc10b4f024f7bfe6279efdcbd6;p=nethack add the hardcoded menu control keys to key help '? k' shows menu controls in a fancy layout and '? i' lists the same things in basic layout but both only showed the keys that can be changed via option settings. Add , , and so that all relevant keys are listed together whether re-bindable or not. The description of is accurate for tty and curses but possibly not for other interfaces. This also reorders how the controls are listed, moving next page and previous page before first page and last page, and placing invert between select and deselect rather than after both. --- diff --git a/src/options.c b/src/options.c index 01a3b29ae..90d2c5b97 100644 --- a/src/options.c +++ b/src/options.c @@ -1,4 +1,4 @@ -/* NetHack 3.7 options.c $NHDT-Date: 1607591206 2020/12/10 09:06:46 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.485 $ */ +/* NetHack 3.7 options.c $NHDT-Date: 1607692223 2020/12/11 13:10:23 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.486 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Michael Allison, 2008. */ /* NetHack may be freely redistributed. See license for details. */ @@ -204,18 +204,19 @@ static NEARDATA const char *runmodes[] = { "teleport", "run", "walk", static NEARDATA const char *sortltype[] = { "none", "loot", "full" }; static const menu_cmd_t default_menu_cmd_info[] = { - { "menu_first_page", MENU_FIRST_PAGE, "Go to first page" }, - { "menu_last_page", MENU_LAST_PAGE, "Go to last page" }, { "menu_next_page", MENU_NEXT_PAGE, "Go to next page" }, { "menu_previous_page", MENU_PREVIOUS_PAGE, "Go to previous page" }, - { "menu_select_all", MENU_SELECT_ALL, "Select all items" }, - { "menu_deselect_all", MENU_UNSELECT_ALL, "Unselect all items" }, - { "menu_invert_all", MENU_INVERT_ALL, "Invert selection" }, - { "menu_select_page", MENU_SELECT_PAGE, "Select items in current page" }, + { "menu_first_page", MENU_FIRST_PAGE, "Go to first page" }, + { "menu_last_page", MENU_LAST_PAGE, "Go to last page" }, + { "menu_select_all", MENU_SELECT_ALL, "Select all items in entire menu" }, + { "menu_invert_all", MENU_INVERT_ALL, "Invert selection for all items" }, + { "menu_deselect_all", MENU_UNSELECT_ALL, + "Unselect all items in entire menu" }, + { "menu_select_page", MENU_SELECT_PAGE, "Select all items on current page" }, + { "menu_invert_page", MENU_INVERT_PAGE, "Invert current page's selections" }, { "menu_deselect_page", MENU_UNSELECT_PAGE, - "Unselect items in current page" }, - { "menu_invert_page", MENU_INVERT_PAGE, "Invert current page selection" }, - { "menu_search", MENU_SEARCH, "Search and toggle matching items" }, + "Unselect all items on current page" }, + { "menu_search", MENU_SEARCH, "Search and invert matching items" }, }; static void FDECL(nmcpy, (char *, const char *, int)); @@ -4808,11 +4809,13 @@ handler_disclose(VOID_ARGS) any.a_char = DISCLOSE_NO_WITHOUT_PROMPT; add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE, "Never disclose, without prompting", - (c == any.a_char) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE); + (c == any.a_char) ? MENU_ITEMFLAGS_SELECTED + : MENU_ITEMFLAGS_NONE); any.a_char = DISCLOSE_YES_WITHOUT_PROMPT; add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE, "Always disclose, without prompting", - (c == any.a_char) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE); + (c == any.a_char) ? MENU_ITEMFLAGS_SELECTED + : MENU_ITEMFLAGS_NONE); if (*disclosure_names[i] == 'v') { any.a_char = DISCLOSE_SPECIAL_WITHOUT_PROMPT; /* '#' */ add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE, @@ -4823,11 +4826,13 @@ handler_disclose(VOID_ARGS) any.a_char = DISCLOSE_PROMPT_DEFAULT_NO; add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE, "Prompt, with default answer of \"No\"", - (c == any.a_char) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE); + (c == any.a_char) ? MENU_ITEMFLAGS_SELECTED + : MENU_ITEMFLAGS_NONE); any.a_char = DISCLOSE_PROMPT_DEFAULT_YES; add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE, "Prompt, with default answer of \"Yes\"", - (c == any.a_char) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE); + (c == any.a_char) ? MENU_ITEMFLAGS_SELECTED + : MENU_ITEMFLAGS_NONE); if (*disclosure_names[i] == 'v') { any.a_char = DISCLOSE_PROMPT_DEFAULT_SPECIAL; /* '?' */ add_menu(tmpwin, NO_GLYPH, &any, 0, any.a_char, ATR_NONE, @@ -5080,7 +5085,8 @@ handler_sortloot(VOID_ARGS) any.a_char = *sortl_name; add_menu(tmpwin, NO_GLYPH, &any, *sortl_name, 0, ATR_NONE, sortl_name, (flags.sortloot == *sortl_name) - ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE); + ? MENU_ITEMFLAGS_SELECTED + : MENU_ITEMFLAGS_NONE); } end_menu(tmpwin, "Select loot sorting type:"); n = select_menu(tmpwin, PICK_ONE, &sortl_pick); @@ -7706,58 +7712,97 @@ int nset; add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_ITEMFLAGS_NONE); } -/* - * used by cmd.c and pager.c - */ +/* display keys for menu actions; used by cmd.c '?i' and pager.c '?k' */ void show_menu_controls(win, dolist) winid win; boolean dolist; { + struct xtra_cntrls { + const char *key, *desc; + }; + static const struct xtra_cntrls hardcoded[] = { + { "Return", "Accept current choice(s) and dismiss menu" }, + { "Enter", "Same as Return" }, + { "Space", "If not on last page, advance one page;" }, + { " ", "when on last page, treat like Return" }, + { "Escape", "Cancel menu without making any choice(s)" }, + { (char *) 0, (char *) 0} + }; + static const char mc_fmt[] = "%8s %-6s %s", + mc_altfmt[] = "%9s %-6s %s"; char buf[BUFSZ]; + const char *fmt, *arg; + const struct xtra_cntrls *xcp; + + /* + * Relies on spaces to line things up in columns, so must be rendered + * with a fixed-width font or will look dreadful. + */ putstr(win, 0, "Menu control keys:"); - if (dolist) { + if (dolist) { /* key bindings help: '?i' */ int i; + fmt = "%-7s %s"; for (i = 0; i < SIZE(default_menu_cmd_info); i++) { - Sprintf(buf, "%-7s %s", + Sprintf(buf, fmt, visctrl(get_menu_cmd_key(default_menu_cmd_info[i].cmd)), default_menu_cmd_info[i].desc); putstr(win, 0, buf); } - } else { + /* no separator before hardcoded */ + fmt = "%s%-7s %s"; /* extra specifier to absorb 'arg' */ + arg = ""; /* no extra prefix for 'dolist' */ + } else { /* menu controls help: '?k' */ putstr(win, 0, ""); - putstr(win, 0, " Page All items"); - Sprintf(buf, " Select %s %s", - visctrl(get_menu_cmd_key(MENU_SELECT_PAGE)), - visctrl(get_menu_cmd_key(MENU_SELECT_ALL))); + Sprintf(buf, mc_altfmt, "", "Whole", "Current"); + putstr(win, 0, buf); + Sprintf(buf, mc_altfmt, "", " Menu", " Page"); putstr(win, 0, buf); - Sprintf(buf, "Deselect %s %s", - visctrl(get_menu_cmd_key(MENU_UNSELECT_PAGE)), - visctrl(get_menu_cmd_key(MENU_UNSELECT_ALL))); + Sprintf(buf, mc_fmt, "Select", + visctrl(get_menu_cmd_key(MENU_SELECT_ALL)), + visctrl(get_menu_cmd_key(MENU_SELECT_PAGE))); putstr(win, 0, buf); - Sprintf(buf, " Invert %s %s", - visctrl(get_menu_cmd_key(MENU_INVERT_PAGE)), - visctrl(get_menu_cmd_key(MENU_INVERT_ALL))); + Sprintf(buf, mc_fmt, "Invert", + visctrl(get_menu_cmd_key(MENU_INVERT_ALL)), + visctrl(get_menu_cmd_key(MENU_INVERT_PAGE))); + putstr(win, 0, buf); + Sprintf(buf, mc_fmt, "Deselect", + visctrl(get_menu_cmd_key(MENU_UNSELECT_ALL)), + visctrl(get_menu_cmd_key(MENU_UNSELECT_PAGE))); putstr(win, 0, buf); putstr(win, 0, ""); - Sprintf(buf, " Go to %s Next page", - visctrl(get_menu_cmd_key(MENU_NEXT_PAGE))); + Sprintf(buf, mc_fmt, "Go to", + visctrl(get_menu_cmd_key(MENU_NEXT_PAGE)), + "Next page"); + putstr(win, 0, buf); + Sprintf(buf, mc_fmt, "", + visctrl(get_menu_cmd_key(MENU_PREVIOUS_PAGE)), + "Previous page"); putstr(win, 0, buf); - Sprintf(buf, " %s Previous page", - visctrl(get_menu_cmd_key(MENU_PREVIOUS_PAGE))); + Sprintf(buf, mc_fmt, "", + visctrl(get_menu_cmd_key(MENU_FIRST_PAGE)), + "First page"); putstr(win, 0, buf); - Sprintf(buf, " %s First page", - visctrl(get_menu_cmd_key(MENU_FIRST_PAGE))); + Sprintf(buf, mc_fmt, "", + visctrl(get_menu_cmd_key(MENU_LAST_PAGE)), + "Last page"); putstr(win, 0, buf); - Sprintf(buf, " %s Last page", - visctrl(get_menu_cmd_key(MENU_LAST_PAGE))); + putstr(win, 0, ""); + Sprintf(buf, mc_fmt, "Search", + visctrl(get_menu_cmd_key(MENU_SEARCH)), + "Exter a target string and invert all matching entries"); putstr(win, 0, buf); + /* separator before hardcoded */ putstr(win, 0, ""); - Sprintf(buf, " %s Search and toggle matching entries", - visctrl(get_menu_cmd_key(MENU_SEARCH))); + fmt = "%9s %-8s %s"; + arg = "Other "; /* prefix for first hardcoded[] entry, then reset */ + } + for (xcp = hardcoded; xcp->key; ++xcp) { + Sprintf(buf, fmt, arg, xcp->key, xcp->desc); putstr(win, 0, buf); + arg = ""; } } static int