]> granicus.if.org Git - nethack/commitdiff
add the hardcoded menu control keys to key help
authorPatR <rankin@nethack.org>
Fri, 11 Dec 2020 13:10:43 +0000 (05:10 -0800)
committerPatR <rankin@nethack.org>
Fri, 11 Dec 2020 13:10:43 +0000 (05:10 -0800)
'? 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 <return>, <space>, and
<escape> so that all relevant keys are listed together whether
re-bindable or not.  The description of <space> 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.

src/options.c

index 01a3b29aea129c932840b5194724e37af2b8d555..90d2c5b97724d32ec34f29e01528e801aaff5bff 100644 (file)
@@ -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