display keys for menu actions; used by cmd.c '?i' and pager.c '?k' */
| 9067 | |
| 9068 | /* display keys for menu actions; used by cmd.c '?i' and pager.c '?k' */ |
| 9069 | void |
| 9070 | show_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))); |
no test coverage detected