home · contact · privacy
Client: Restructure passing of keybinding manipulation commands.
authorChristian Heller <c.heller@plomlompom.de>
Fri, 7 Nov 2014 14:00:00 +0000 (15:00 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Fri, 7 Nov 2014 14:00:00 +0000 (15:00 +0100)
confclient/commands
confclient/interface_conf
confclient/single_wins/info
confclient/single_wins/inventory
confclient/single_wins/log
confclient/single_wins/map
src/client/control.c
src/client/map.h
src/client/windows.h

index f5b987e450dbf2aa29633580083770df111f508b..71004bfa13857983ee63bbd43a6f2ee05864a333 100644 (file)
@@ -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
index 96a6b2e79b78b4503604c29915736d048613fbf4..820e1993bc28459ba1025b427fd1cd8c6aa00e1f 100644 (file)
@@ -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
index c17470d3b332146d0c3ddd5ec0556380417c32b8..bf9c03140cea2d1e94d57b7d4d76391bad0cd7cd 100644 (file)
@@ -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
-
index 481e9dcbce2bb78af8840f6113ef28acdf8c2221..fbc775e4a6f17dc9a224491951cb75d5071f76d0 100644 (file)
@@ -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
index c5825c6b4a05a4002fef7bc536d8a483f3ef198c..d064db51e786c3f58b212660678e3b839fbbfb48 100644 (file)
@@ -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
index 77ddc78b5851cea72593c5adda346c26fa7a1bec..38ed98a1131f51b75efda198d7ede4fff39e519e 100644 (file)
@@ -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
index 5595cccd45a1cb8aa7b7d18baa384bd46edfd74c..536c5675bb3e78f7a13af556612031151e778421 100644 (file)
@@ -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));
 }
 
 
index 0031da2278f81f2996a79ca0e7c8f31ab36478a7..bd919d85fd3d2aa707f4b61f128a4b914747a697 100644 (file)
@@ -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
index 3b272e2812245a1181adb41c990f794dbb1b6dfa..91f3f7bf454ee33142a9e893f11c23bb0b35713b 100644 (file)
@@ -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 */