MCPcopy Create free account
hub / github.com/NetHack/NetHack / show_menu_controls

Function show_menu_controls

src/options.c:9069–9174  ·  view source on GitHub ↗

display keys for menu actions; used by cmd.c '?i' and pager.c '?k' */

Source from the content-addressed store, hash-verified

9067
9068/* display keys for menu actions; used by cmd.c '?i' and pager.c '?k' */
9069void
9070show_menu_controls(winid win, boolean dolist)
9071{
9072 struct xtra_cntrls {
9073 const char *key, *desc;
9074 };
9075 static const struct xtra_cntrls hardcoded[] = {
9076 { "Return", "Accept current choice(s) and dismiss menu" },
9077 { "Enter", "Same as Return" },
9078 { "Space", "If not on last page, advance one page;" },
9079 { " ", "when on last page, treat like Return" },
9080 { "Escape", "Cancel menu without making any choice(s)" },
9081 { (char *) 0, (char *) 0}
9082 };
9083 static const char mc_fmt[] = "%8s %-6s %s",
9084 mc_altfmt[] = "%9s %-6s %s";
9085 char buf[BUFSZ];
9086 const char *fmt, *arg;
9087 const struct xtra_cntrls *xcp;
9088 boolean has_menu_shift = wc2_supported("menu_shift");
9089
9090 /*
9091 * Relies on spaces to line things up in columns, so must be rendered
9092 * with a fixed-width font or will look dreadful.
9093 */
9094
9095 putstr(win, 0, "Menu control keys:");
9096 if (dolist) { /* key bindings help: '?i' */
9097 int i;
9098 char ch;
9099
9100 fmt = "%-7s %s";
9101 for (i = 0; default_menu_cmd_info[i].desc; i++) {
9102 ch = default_menu_cmd_info[i].cmd;
9103 if ((ch == MENU_SHIFT_RIGHT
9104 || ch == MENU_SHIFT_LEFT) && !has_menu_shift)
9105 continue;
9106 Sprintf(buf, fmt,
9107 visctrl(get_menu_cmd_key(ch)),
9108 default_menu_cmd_info[i].desc);
9109 putstr(win, 0, buf);
9110 }
9111 /* no separator before hardcoded */
9112 fmt = "%s%-7s %s"; /* extra specifier to absorb 'arg' */
9113 arg = ""; /* no extra prefix for 'dolist' */
9114 } else { /* menu controls help: '?k' */
9115 putstr(win, 0, "");
9116 Sprintf(buf, mc_altfmt, "", "Whole", "Current");
9117 putstr(win, 0, buf);
9118 Sprintf(buf, mc_altfmt, "", " Menu", " Page");
9119 putstr(win, 0, buf);
9120 Sprintf(buf, mc_fmt, "Select",
9121 visctrl(get_menu_cmd_key(MENU_SELECT_ALL)),
9122 visctrl(get_menu_cmd_key(MENU_SELECT_PAGE)));
9123 putstr(win, 0, buf);
9124 Sprintf(buf, mc_fmt, "Invert",
9125 visctrl(get_menu_cmd_key(MENU_INVERT_ALL)),
9126 visctrl(get_menu_cmd_key(MENU_INVERT_PAGE)));

Callers 2

domenucontrolsFunction · 0.85
dokeylistFunction · 0.85

Calls 3

wc2_supportedFunction · 0.85
visctrlFunction · 0.85
get_menu_cmd_keyFunction · 0.85

Tested by

no test coverage detected