From 06e80a3d3fa38c2465d58eef1306dfebe4512497 Mon Sep 17 00:00:00 2001 From: Christian Heller <c.heller@plomlompom.de> Date: Fri, 7 Nov 2014 15:00:00 +0100 Subject: [PATCH] Client: Restructure passing of keybinding manipulation commands. --- confclient/commands | 24 +++++++++--------- confclient/interface_conf | 36 +++++++++++++-------------- confclient/single_wins/info | 37 ++++++++++++++-------------- confclient/single_wins/inventory | 36 +++++++++++++-------------- confclient/single_wins/log | 36 +++++++++++++-------------- confclient/single_wins/map | 36 +++++++++++++-------------- src/client/control.c | 42 +++++++++++++++++--------------- src/client/map.h | 2 ++ src/client/windows.h | 2 +- 9 files changed, 128 insertions(+), 123 deletions(-) diff --git a/confclient/commands b/confclient/commands index f5b987e..71004bf 100644 --- a/confclient/commands +++ b/confclient/commands @@ -74,13 +74,13 @@ DESCRIPTION 'scroll pad left' COMMAND scrl_r DESCRIPTION 'scroll pad right' -COMMAND g_keys_d +COMMAND keyb_dG DESCRIPTION 'nav down global keys' -COMMAND g_keys_u +COMMAND keyb_uG DESCRIPTION 'nav up global keys' -COMMAND g_keys_m +COMMAND keyb_mG DESCRIPTION 'mod global keys' COMMAND winconf @@ -113,31 +113,31 @@ DESCRIPTION 'nav down object' COMMAND inv_u DESCRIPTION 'nav up object' -COMMAND w_keys_d +COMMAND keyb_dw DESCRIPTION 'nav down window keys' -COMMAND w_keys_u +COMMAND keyb_uw DESCRIPTION 'nav up window nav' -COMMAND w_keys_m +COMMAND keyb_mw DESCRIPTION 'mod window key' -COMMAND wg_keys_d +COMMAND keyb_dg DESCRIPTION 'nav down win geometry config keys' -COMMAND wg_keys_u +COMMAND keyb_ug DESCRIPTION 'nav up win geometry config keys' -COMMAND wg_keys_m +COMMAND keyb_mg DESCRIPTION 'mod win geometry config keys' -COMMAND wk_keys_d +COMMAND keyb_dk DESCRIPTION 'nav down win keys config keys' -COMMAND wk_keys_u +COMMAND keyb_uk DESCRIPTION 'nav up win keys config keys' -COMMAND wk_keys_m +COMMAND keyb_mk DESCRIPTION 'mod win keys config keys' COMMAND reload_conf diff --git a/confclient/interface_conf b/confclient/interface_conf index 96a6b2e..820e199 100644 --- a/confclient/interface_conf +++ b/confclient/interface_conf @@ -29,30 +29,39 @@ KEY 121 to_height_t KEY 120 to_width_t KEYBINDINGS 'winkeys' -KEY 258 w_keys_d -KEY 259 w_keys_u -KEY 10 w_keys_m +KEY 258 keyb_dw +KEY 259 keyb_uw +KEY 10 keyb_mw WIN_ORDER 'micl0a' WIN_FOCUS 'm' +WINDOW 0 +NAME 'Set global keys' +BREAK 0 +WIDTH 22 +HEIGHT 7 +KEY 258 keyb_dG +KEY 259 keyb_uG +KEY 10 keyb_mG + WINDOW 1 NAME 'Set window geometry keys' BREAK 0 WIDTH 29 HEIGHT 9 -KEY 258 wg_keys_d -KEY 259 wg_keys_u -KEY 10 wg_keys_m +KEY 258 keyb_dg +KEY 259 keyb_ug +KEY 10 keyb_mg WINDOW 2 NAME 'Set window keybinding keys' BREAK 0 WIDTH 29 HEIGHT 3 -KEY 258 wk_keys_d -KEY 259 wk_keys_u -KEY 10 wk_keys_m +KEY 258 keyb_dk +KEY 259 keyb_uk +KEY 10 keyb_mk WINDOW c NAME 'Inventory' @@ -97,15 +106,6 @@ KEY 261 map_r KEY 46 map_c KEY 70 to_autofocus -WINDOW 0 -NAME 'Set global keys' -BREAK 0 -WIDTH 22 -HEIGHT 7 -KEY 258 g_keys_d -KEY 259 g_keys_u -KEY 10 g_keys_m - WINDOW a NAME 'Active window`s keys' BREAK 0 diff --git a/confclient/single_wins/info b/confclient/single_wins/info index c17470d..bf9c031 100644 --- a/confclient/single_wins/info +++ b/confclient/single_wins/info @@ -41,9 +41,9 @@ KEY 121 to_height_t KEY 120 to_width_t KEYBINDINGS 'winkeys' -KEY 258 w_keys_d -KEY 259 w_keys_u -KEY 10 w_keys_m +KEY 258 keyb_dw +KEY 259 keyb_uw +KEY 10 keyb_mw WIN_ORDER 'i' WIN_FOCUS 'i' @@ -54,23 +54,32 @@ BREAK 2 WIDTH 0 HEIGHT 0 +WINDOW 0 +NAME 'Set global keys' +BREAK 0 +WIDTH 22 +HEIGHT 7 +KEY 258 keyb_dG +KEY 259 keyb_uG +KEY 10 keyb_mG + WINDOW 1 NAME 'Set window geometry keys' BREAK 0 WIDTH 29 HEIGHT 9 -KEY 258 wg_keys_d -KEY 259 wg_keys_u -KEY 10 wg_keys_m +KEY 258 keyb_dg +KEY 259 keyb_ug +KEY 10 keyb_mg WINDOW 2 NAME 'Set window keybinding keys' BREAK 0 WIDTH 29 HEIGHT 3 -KEY 258 wk_keys_d -KEY 259 wk_keys_u -KEY 10 wk_keys_m +KEY 258 keyb_dk +KEY 259 keyb_uk +KEY 10 keyb_mk WINDOW c NAME 'Inventory' @@ -109,18 +118,8 @@ KEY 261 map_r KEY 46 map_c KEY 70 to_autofocus -WINDOW 0 -NAME 'Set global keys' -BREAK 0 -WIDTH 22 -HEIGHT 7 -KEY 258 g_keys_d -KEY 259 g_keys_u -KEY 10 g_keys_m - WINDOW a NAME 'Active window`s keys' BREAK 0 WIDTH 22 HEIGHT -8 - diff --git a/confclient/single_wins/inventory b/confclient/single_wins/inventory index 481e9dc..fbc775e 100644 --- a/confclient/single_wins/inventory +++ b/confclient/single_wins/inventory @@ -41,9 +41,9 @@ KEY 121 to_height_t KEY 120 to_width_t KEYBINDINGS 'winkeys' -KEY 258 w_keys_d -KEY 259 w_keys_u -KEY 10 w_keys_m +KEY 258 keyb_dw +KEY 259 keyb_uw +KEY 10 keyb_mw WIN_ORDER 'c' WIN_FOCUS 'c' @@ -56,23 +56,32 @@ HEIGHT 0 KEY 259 inv_u KEY 258 inv_d +WINDOW 0 +NAME 'Set global keys' +BREAK 0 +WIDTH 22 +HEIGHT 7 +KEY 258 keyb_dG +KEY 259 keyb_uG +KEY 10 keyb_mG + WINDOW 1 NAME 'Set window geometry keys' BREAK 0 WIDTH 29 HEIGHT 9 -KEY 258 wg_keys_d -KEY 259 wg_keys_u -KEY 10 wg_keys_m +KEY 258 keyb_dg +KEY 259 keyb_ug +KEY 10 keyb_mg WINDOW 2 NAME 'Set window keybinding keys' BREAK 0 WIDTH 29 HEIGHT 3 -KEY 258 wk_keys_d -KEY 259 wk_keys_u -KEY 10 wk_keys_m +KEY 258 keyb_dk +KEY 259 keyb_uk +KEY 10 keyb_mk WINDOW i NAME 'Info' @@ -107,15 +116,6 @@ KEY 261 map_r KEY 46 map_c KEY 70 to_autofocus -WINDOW 0 -NAME 'Set global keys' -BREAK 0 -WIDTH 22 -HEIGHT 7 -KEY 258 g_keys_d -KEY 259 g_keys_u -KEY 10 g_keys_m - WINDOW a NAME 'Active window`s keys' BREAK 0 diff --git a/confclient/single_wins/log b/confclient/single_wins/log index c5825c6..d064db5 100644 --- a/confclient/single_wins/log +++ b/confclient/single_wins/log @@ -41,9 +41,9 @@ KEY 121 to_height_t KEY 120 to_width_t KEYBINDINGS 'winkeys' -KEY 258 w_keys_d -KEY 259 w_keys_u -KEY 10 w_keys_m +KEY 258 keyb_dw +KEY 259 keyb_uw +KEY 10 keyb_mw WIN_ORDER 'l' WIN_FOCUS 'l' @@ -54,23 +54,32 @@ BREAK 0 WIDTH 0 HEIGHT 0 +WINDOW 0 +NAME 'Set global keys' +BREAK 0 +WIDTH 22 +HEIGHT 7 +KEY 258 keyb_dG +KEY 259 keyb_uG +KEY 10 keyb_mG + WINDOW 1 NAME 'Set window geometry keys' BREAK 0 WIDTH 29 HEIGHT 9 -KEY 258 wg_keys_d -KEY 259 wg_keys_u -KEY 10 wg_keys_m +KEY 258 keyb_dg +KEY 259 keyb_ug +KEY 10 keyb_mg WINDOW 2 NAME 'Set window keybinding keys' BREAK 0 WIDTH 29 HEIGHT 3 -KEY 258 wk_keys_d -KEY 259 wk_keys_u -KEY 10 wk_keys_m +KEY 258 keyb_dk +KEY 259 keyb_uk +KEY 10 keyb_mk WINDOW c NAME 'Inventory' @@ -109,15 +118,6 @@ KEY 261 map_r KEY 46 map_c KEY 70 to_autofocus -WINDOW 0 -NAME 'Set global keys' -BREAK 0 -WIDTH 22 -HEIGHT 7 -KEY 258 g_keys_d -KEY 259 g_keys_u -KEY 10 g_keys_m - WINDOW a NAME 'Active window`s keys' BREAK 0 diff --git a/confclient/single_wins/map b/confclient/single_wins/map index 77ddc78..38ed98a 100644 --- a/confclient/single_wins/map +++ b/confclient/single_wins/map @@ -41,9 +41,9 @@ KEY 121 to_height_t KEY 120 to_width_t KEYBINDINGS 'winkeys' -KEY 258 w_keys_d -KEY 259 w_keys_u -KEY 10 w_keys_m +KEY 258 keyb_dw +KEY 259 keyb_uw +KEY 10 keyb_mw WIN_ORDER 'm' WIN_FOCUS 'm' @@ -58,23 +58,32 @@ KEY 258 map_d KEY 260 map_l KEY 261 map_r +WINDOW 0 +NAME 'Set global keys' +BREAK 0 +WIDTH 22 +HEIGHT 7 +KEY 258 keyb_dG +KEY 259 keyb_uG +KEY 10 keyb_mG + WINDOW 1 NAME 'Set window geometry keys' BREAK 0 WIDTH 29 HEIGHT 9 -KEY 258 wg_keys_d -KEY 259 wg_keys_u -KEY 10 wg_keys_m +KEY 258 keyb_dg +KEY 259 keyb_ug +KEY 10 keyb_mg WINDOW 2 NAME 'Set window keybinding keys' BREAK 0 WIDTH 29 HEIGHT 3 -KEY 258 wk_keys_d -KEY 259 wk_keys_u -KEY 10 wk_keys_m +KEY 258 keyb_dk +KEY 259 keyb_uk +KEY 10 keyb_mk WINDOW c NAME 'Inventory' @@ -98,15 +107,6 @@ BREAK 0 WIDTH 13 HEIGHT -8 -WINDOW 0 -NAME 'Set global keys' -BREAK 0 -WIDTH 22 -HEIGHT 7 -KEY 258 g_keys_d -KEY 259 g_keys_u -KEY 10 g_keys_m - WINDOW a NAME 'Active window`s keys' BREAK 0 diff --git a/src/client/control.c b/src/client/control.c index 5595ccc..536c567 100644 --- a/src/client/control.c +++ b/src/client/control.c @@ -9,7 +9,7 @@ #include <stdint.h> /* uint8_t, uint16_t, uint32_t, UINT32_MAX */ #include <stdlib.h> /* free() */ #include <stdio.h> /* sprintf() */ -#include <string.h> /* strlen() */ +#include <string.h> /* strlen(), strcmp(), strncmp() */ #include "../common/rexit.h" /* exit_err(), exit_trouble() */ #include "../common/try_malloc.h" /* try_malloc() */ #include "interface_conf.h" /* reload_interface_conf(), save_interface_conf() */ @@ -37,8 +37,12 @@ static void nav_inventory(char dir); static uint8_t try_0args(struct Command * command, char * match, void (* f) ()); static uint8_t try_1args(struct Command * command, char * match, void (* f) (char), char c); -static uint8_t try_2args(struct Command * command, char * match, - void (* f) (char, char), char c1, char c2); + +/* If "command" fits pattern "keyb_XY" with Y a proper keybinding list ID char + * and X one of "u" (for "up"), "d" (for "down") or "m" (for "modify"), move up + * or down or modify entry in the selected keybinding list. + */ +static uint8_t try_kb_manip(char * command); /* Try if "command" matches a hard-coded list of client-only commands and, if * successful, execute the match and return 1. Else, return 0. @@ -106,12 +110,23 @@ static uint8_t try_1args(struct Command * command, char * match, -static uint8_t try_2args(struct Command * command, char * match, - void (* f) (char, char), char c1, char c2) +/* If "command" fits pattern "keyb_XY" with Y a proper keybinding list ID char + * and X one of "u" (for "up"), "d" (for "down") or "m" (for "modify"), move up + * or down or modify entry in the selected keybinding list. + */ +static uint8_t try_kb_manip(char * command) { - if (!strcmp(command->dsc_short, match)) + char * cmp = "keyb_"; + if (strlen(command) == strlen(cmp)+2 && !strncmp(command, cmp, strlen(cmp))) { - f(c1, c2); + if ('m' == command[strlen(cmp)]) + { + mod_selected_keyb(command[strlen(cmp) + 1]); + } + else if ('u' == command[strlen(cmp)] || 'd' == command[strlen(cmp)]) + { + move_keyb_selection(command[strlen(cmp) + 1], command[strlen(cmp)]); + } return 1; } return 0; @@ -153,18 +168,7 @@ static uint8_t try_client_commands(struct Command * command) || try_1args(command, "shift_b", shift_active_win, 'b') || try_0args(command, "reload_conf", reload_interface_conf) || try_0args(command, "save_conf", save_interface_conf) - || try_1args(command, "g_keys_m", mod_selected_keyb, 'G') - || try_2args(command, "g_keys_u", move_keyb_selection, 'G', 'u') - || try_2args(command, "g_keys_d", move_keyb_selection, 'G', 'd') - || try_1args(command, "w_keys_m", mod_selected_keyb, 'w') - || try_2args(command, "w_keys_u", move_keyb_selection, 'w', 'u') - || try_2args(command, "w_keys_d", move_keyb_selection, 'w', 'd') - || try_1args(command, "wg_keys_m", mod_selected_keyb, 'g') - || try_2args(command, "wg_keys_u", move_keyb_selection, 'g', 'u') - || try_2args(command, "wg_keys_d", move_keyb_selection, 'g', 'd') - || try_1args(command, "wk_keys_m", mod_selected_keyb, 'k') - || try_2args(command, "wk_keys_u", move_keyb_selection, 'k', 'u') - || try_2args(command, "wk_keys_d", move_keyb_selection, 'k', 'd')); + || try_kb_manip(command->dsc_short)); } diff --git a/src/client/map.h b/src/client/map.h index 0031da2..bd919d8 100644 --- a/src/client/map.h +++ b/src/client/map.h @@ -23,4 +23,6 @@ extern void map_center(); /* Toggle world.focus_each_turn (auto-centering of map on player each turn). */ extern void toggle_autofocus(); + + #endif diff --git a/src/client/windows.h b/src/client/windows.h index 3b272e2..91f3f7b 100644 --- a/src/client/windows.h +++ b/src/client/windows.h @@ -60,7 +60,7 @@ struct Win struct yx_uint16 target_center; /* saves .center when toggling .view */ struct yx_uint16 frame_size; /* size of window/frame to see winmap through*/ struct yx_uint16 start; /* upper left corner of window in v_screen */ - struct yx_uint16 center; /* winnap cell to center frame on if < winmap */ + struct yx_uint16 center; /* winmap cell to center frame on if < winmap */ struct yx_uint16 winmap_size; /* delimits .winmap, sorts it into lines */ chtype * winmap; /* window content in sequence of chtype's to write */ int16_t target_height; /* window size / .frame_size description in config */ -- 2.30.2