diff options
-rw-r--r-- | crawl-ref/source/chardump.cc | 4 | ||||
-rw-r--r-- | crawl-ref/source/command.cc | 1 | ||||
-rw-r--r-- | crawl-ref/source/macro.cc | 88 | ||||
-rw-r--r-- | crawl-ref/source/macro.h | 1 |
4 files changed, 93 insertions, 1 deletions
diff --git a/crawl-ref/source/chardump.cc b/crawl-ref/source/chardump.cc index 36480530ee..1ec449eeb7 100644 --- a/crawl-ref/source/chardump.cc +++ b/crawl-ref/source/chardump.cc @@ -163,6 +163,7 @@ static void dump_section(dump_params &par) } } +// #define DEBUG_DUMP_COMMANDS bool dump_char(const std::string &fname, bool show_prices, bool full_id, const scorefile_entry *se) { @@ -177,6 +178,9 @@ bool dump_char(const std::string &fname, bool show_prices, bool full_id, par.section = Options.dump_order[i]; dump_section(par); } +#ifdef DEBUG_DUMP_COMMANDS + list_all_commands(par.text); +#endif return write_dump(fname, par); } diff --git a/crawl-ref/source/command.cc b/crawl-ref/source/command.cc index 981da89674..fe86234b1a 100644 --- a/crawl-ref/source/command.cc +++ b/crawl-ref/source/command.cc @@ -2123,7 +2123,6 @@ void show_butchering_help() show_specific_help( getHelpString("butchering") ); } - static void _add_formatted_keyhelp(column_composer &cols) { cols.add_formatted( diff --git a/crawl-ref/source/macro.cc b/crawl-ref/source/macro.cc index d1fa5f004e..41fcdbc327 100644 --- a/crawl-ref/source/macro.cc +++ b/crawl-ref/source/macro.cc @@ -1235,3 +1235,91 @@ void bind_command_to_key(command_type cmd, int key) key_map[key] = cmd; cmd_map[cmd] = key; } + +static std::string _special_keys_to_string(int key) +{ + const bool shift = (key >= CK_SHIFT_UP && key <= CK_SHIFT_PGDN); + const bool ctrl = (key >= CK_CTRL_UP && key <= CK_CTRL_PGDN); + + std::string cmd = ""; + + int newkey = key; + if (shift) + { + newkey -= (CK_SHIFT_UP - CK_UP); + cmd = "Shift-"; + } + else if (ctrl) + { + newkey -= (CK_CTRL_UP - CK_UP); + cmd = "Ctrl-"; + } + + switch (newkey) + { + case CK_ENTER: cmd += "Enter"; break; + case CK_BKSP: cmd += "Backspace"; break; + case CK_ESCAPE: cmd += "Esc"; break; + case CK_DELETE: cmd += "Del"; break; + case CK_UP: cmd += "Up"; break; + case CK_DOWN: cmd += "Down"; break; + case CK_LEFT: cmd += "Left"; break; + case CK_RIGHT: cmd += "Right"; break; + case CK_INSERT: cmd += "Ins"; break; + case CK_HOME: cmd += "Home"; break; + case CK_END: cmd += "End"; break; + case CK_CLEAR: cmd += "Clear"; break; + case CK_PGUP: cmd += "PgUp"; break; + case CK_PGDN: cmd += "PgDn"; break; + } + + return (cmd); +} + +static std::string _command_to_string(command_type cmd) +{ + const int key = command_to_key(cmd); + + const std::string desc = _special_keys_to_string(key); + if (!desc.empty()) + return (desc); + + if (key >= 32 && key < 256) + snprintf(info, INFO_SIZE, "%c", (char) key); + else if (key > 1000 && key <= 1009) + { + const int numpad = (key - 1000); + snprintf(info, INFO_SIZE, "Numpad %d", numpad); + } + else + { + const int ch = key + 'A' - 1; + if (ch >= 'A' && ch <= 'Z') + snprintf(info, INFO_SIZE, "Ctrl-%c", (char) ch); + else + snprintf(info, INFO_SIZE, "%d", key); + } + + std::string result = info; + return (result); +} + +void list_all_commands(std::string &commands) +{ + for (int i = CMD_NO_CMD; i < CMD_MAX_CMD; i++) + { + const command_type cmd = (command_type) i; + + const std::string command_name = command_to_name(cmd); + if (command_name == "CMD_NO_CMD") + continue; + + if (context_for_command(cmd) != KMC_DEFAULT) + continue; + + snprintf(info, INFO_SIZE, "%s: %s\n", + command_name.c_str(), _command_to_string(cmd).c_str()); + commands += info; + } + commands += "\n"; +} diff --git a/crawl-ref/source/macro.h b/crawl-ref/source/macro.h index 0e847a1b55..20c1d0750c 100644 --- a/crawl-ref/source/macro.h +++ b/crawl-ref/source/macro.h @@ -94,4 +94,5 @@ int command_to_key(command_type cmd); KeymapContext context_for_command(command_type cmd); void bind_command_to_key(command_type cmd, int key); +void list_all_commands(std::string &commands); #endif |