Show menu control keys in help menu

This commit is contained in:
Pasi Kallinen
2016-10-06 08:53:38 +03:00
parent 680c8a542c
commit 53cd30c54c
4 changed files with 93 additions and 16 deletions

View File

@@ -1670,7 +1670,9 @@ E int FDECL(choose_classes_menu, (const char *, int, BOOLEAN_P,
char *, char *));
E void FDECL(parsebindings, (char *));
E void FDECL(add_menu_cmd_alias, (CHAR_P, CHAR_P));
E char FDECL(get_menu_cmd_key, (CHAR_P));
E char FDECL(map_menu_cmd, (CHAR_P));
E void FDECL(show_menu_controls, (winid, boolean));
E void FDECL(assign_warnings, (uchar *));
E char *FDECL(nh_getenv, (const char *));
E void FDECL(set_duplicate_opt_detection, (int));

View File

@@ -3010,6 +3010,9 @@ dokeylist(VOID_ARGS)
keys_used[(uchar)C('c')] = TRUE;
#endif
putstr(datawin, 0, "");
show_menu_controls(datawin, TRUE);
if (dokeylist_putcmds(datawin, TRUE, GENERALCMD, WIZMODECMD, &keys_used)) {
putstr(datawin, 0, "");
putstr(datawin, 0, "General commands:");
@@ -4193,7 +4196,6 @@ boolean nodiag;
};
}
STATIC_OVL boolean
help_dir(sym, msg)
char sym;

View File

@@ -469,21 +469,21 @@ static char def_inv_order[MAXOCLASSES] = {
typedef struct {
const char *name;
char cmd;
const char *desc;
} menu_cmd_t;
#define NUM_MENU_CMDS 11
static const menu_cmd_t default_menu_cmd_info[NUM_MENU_CMDS] = {
/* 0*/ { "menu_first_page", MENU_FIRST_PAGE },
{ "menu_last_page", MENU_LAST_PAGE },
{ "menu_next_page", MENU_NEXT_PAGE },
{ "menu_previous_page", MENU_PREVIOUS_PAGE },
{ "menu_select_all", MENU_SELECT_ALL },
/* 5*/ { "menu_deselect_all", MENU_UNSELECT_ALL },
{ "menu_invert_all", MENU_INVERT_ALL },
{ "menu_select_page", MENU_SELECT_PAGE },
{ "menu_deselect_page", MENU_UNSELECT_PAGE },
{ "menu_invert_page", MENU_INVERT_PAGE },
/*10*/ { "menu_search", MENU_SEARCH },
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, "Insert selection" },
{ "menu_select_page", MENU_SELECT_PAGE, "Select items in current page" },
{ "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" },
};
/*
@@ -3237,7 +3237,7 @@ boolean tinitial, tfrom_file;
}
/* check for menu command mapping */
for (i = 0; i < NUM_MENU_CMDS; i++) {
for (i = 0; i < SIZE(default_menu_cmd_info); i++) {
fullname = default_menu_cmd_info[i].name;
if (duplicate)
complain_about_duplicate(opts, 1);
@@ -3512,7 +3512,7 @@ char* bindings;
return;
/* is it a menu command? */
for (i = 0; i < NUM_MENU_CMDS; i++) {
for (i = 0; i < SIZE(default_menu_cmd_info); i++) {
if (!strcmp(default_menu_cmd_info[i].name, bind)) {
if (illegal_menu_cmd_key(key)) {
char tmp[BUFSZ];
@@ -3578,6 +3578,18 @@ char from_ch, to_ch;
}
}
char
get_menu_cmd_key(ch)
char ch;
{
char *found = index(mapped_menu_op, ch);
if (found) {
int idx = (int) (found - mapped_menu_op);
ch = mapped_menu_cmds[idx];
}
return ch;
}
/*
* Map the given character to its corresponding menu command. If it
* doesn't match anything, just return the original.
@@ -3594,6 +3606,57 @@ char ch;
return ch;
}
void
show_menu_controls(win, dolist)
winid win;
boolean dolist;
{
char buf[BUFSZ];
putstr(win, 0, "Menu control keys:");
if (dolist) {
int i;
for (i = 0; i < SIZE(default_menu_cmd_info); i++) {
Sprintf(buf, "%-8s %s",
visctrl(get_menu_cmd_key(default_menu_cmd_info[i].cmd)),
default_menu_cmd_info[i].desc);
putstr(win, 0, buf);
}
} else {
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)));
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)));
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)));
putstr(win, 0, buf);
putstr(win, 0, "");
Sprintf(buf, " Go to %s Next page",
visctrl(get_menu_cmd_key(MENU_NEXT_PAGE)));
putstr(win, 0, buf);
Sprintf(buf, " %s Previous page",
visctrl(get_menu_cmd_key(MENU_PREVIOUS_PAGE)));
putstr(win, 0, buf);
Sprintf(buf, " %s First page",
visctrl(get_menu_cmd_key(MENU_FIRST_PAGE)));
putstr(win, 0, buf);
Sprintf(buf, " %s Last page",
visctrl(get_menu_cmd_key(MENU_LAST_PAGE)));
putstr(win, 0, buf);
putstr(win, 0, "");
Sprintf(buf, " %s Search and toggle matching entries",
visctrl(get_menu_cmd_key(MENU_SEARCH)));
putstr(win, 0, buf);
}
}
#if defined(MICRO) || defined(MAC) || defined(WIN32)
#define OPTIONS_HEADING "OPTIONS"
#else

View File

@@ -1720,6 +1720,15 @@ hmenu_doextlist()
(void) doextlist();
}
void
domenucontrols()
{
winid cwin = create_nhwindow(NHW_TEXT);
show_menu_controls(cwin, FALSE);
display_nhwindow(cwin, FALSE);
destroy_nhwindow(cwin);
}
/* data for dohelp() */
static struct {
void (*f)();
@@ -1735,6 +1744,7 @@ static struct {
{ dispfile_optionfile, "Longer explanation of game options." },
{ dokeylist, "Full list of keyboard commands" },
{ hmenu_doextlist, "List of extended commands." },
{ domenucontrols, "List menu control keys" },
{ dispfile_license, "The NetHack license." },
{ docontact, "Support information." },
#ifdef PORT_HELP