-void
-setup_keys(void)
-{
- setkeybinding(MODKEY, XK_space, kf_cycle_layout);
- setkeybinding(MODKEY|ShiftMask, XK_space, kf_stack_reset);
- setkeybinding(MODKEY, XK_h, kf_master_shrink);
- setkeybinding(MODKEY, XK_l, kf_master_grow);
- setkeybinding(MODKEY, XK_comma, kf_master_add);
- setkeybinding(MODKEY, XK_period, kf_master_del);
- setkeybinding(MODKEY|ShiftMask, XK_comma, kf_stack_inc);
- setkeybinding(MODKEY|ShiftMask, XK_period, kf_stack_dec);
- setkeybinding(MODKEY, XK_Return, kf_swap_main);
- setkeybinding(MODKEY, XK_j, kf_focus_next);
- setkeybinding(MODKEY, XK_k, kf_focus_prev);
- setkeybinding(MODKEY|ShiftMask, XK_j, kf_swap_next);
- setkeybinding(MODKEY|ShiftMask, XK_k, kf_swap_next);
- setkeybinding(MODKEY|ShiftMask, XK_Return, kf_spawn_term);
- setkeybinding(MODKEY, XK_p, kf_spawn_menu);
- setkeybinding(MODKEY|ShiftMask, XK_q, kf_quit);
- setkeybinding(MODKEY, XK_q, kf_restart);
- setkeybinding(MODKEY, XK_m, kf_focus_main);
- setkeybinding(MODKEY, XK_1, kf_ws_1);
- setkeybinding(MODKEY, XK_2, kf_ws_2);
- setkeybinding(MODKEY, XK_3, kf_ws_3);
- setkeybinding(MODKEY, XK_4, kf_ws_4);
- setkeybinding(MODKEY, XK_5, kf_ws_5);
- setkeybinding(MODKEY, XK_6, kf_ws_6);
- setkeybinding(MODKEY, XK_7, kf_ws_7);
- setkeybinding(MODKEY, XK_8, kf_ws_8);
- setkeybinding(MODKEY, XK_9, kf_ws_9);
- setkeybinding(MODKEY, XK_0, kf_ws_10);
- setkeybinding(MODKEY, XK_Right, kf_ws_next);
- setkeybinding(MODKEY, XK_Left, kf_ws_prev);
- setkeybinding(MODKEY|ShiftMask, XK_Right, kf_screen_next);
- setkeybinding(MODKEY|ShiftMask, XK_Left, kf_screen_prev);
- setkeybinding(MODKEY|ShiftMask, XK_1, kf_mvws_1);
- setkeybinding(MODKEY|ShiftMask, XK_2, kf_mvws_2);
- setkeybinding(MODKEY|ShiftMask, XK_3, kf_mvws_3);
- setkeybinding(MODKEY|ShiftMask, XK_4, kf_mvws_4);
- setkeybinding(MODKEY|ShiftMask, XK_5, kf_mvws_5);
- setkeybinding(MODKEY|ShiftMask, XK_6, kf_mvws_6);
- setkeybinding(MODKEY|ShiftMask, XK_7, kf_mvws_7);
- setkeybinding(MODKEY|ShiftMask, XK_8, kf_mvws_8);
- setkeybinding(MODKEY|ShiftMask, XK_9, kf_mvws_9);
- setkeybinding(MODKEY|ShiftMask, XK_0, kf_mvws_10);
- setkeybinding(MODKEY, XK_b, kf_bar_toggle);
- setkeybinding(MODKEY, XK_Tab, kf_focus_next);
- setkeybinding(MODKEY|ShiftMask, XK_Tab, kf_focus_prev);
- setkeybinding(MODKEY|ShiftMask, XK_x, kf_wind_kill);
- setkeybinding(MODKEY, XK_x, kf_wind_del);
- setkeybinding(MODKEY, XK_s, kf_screenshot_all);
- setkeybinding(MODKEY|ShiftMask, XK_s, kf_screenshot_wind);
- setkeybinding(MODKEY, XK_t, kf_float_toggle);
- setkeybinding(MODKEY|ShiftMask, XK_v, kf_version);
- setkeybinding(MODKEY|ShiftMask, XK_Delete, kf_spawn_lock);
- setkeybinding(MODKEY|ShiftMask, XK_i, kf_spawn_initscr);
-}
-void
-updatenumlockmask(void)
-{
- unsigned int i, j;
- XModifierKeymap *modmap;
+
+int
+setconfbinding(char *selector, char *value, int flags)
+{
+ enum keyfuncid kfid;
+ unsigned int mod;
+ KeySym ks;
+ int i;
+ DNPRINTF(SWM_D_KEY, "setconfbinding: enter\n");
+ if (selector == NULL) {
+ DNPRINTF(SWM_D_KEY, "setconfbinding: unbind %s\n", value);
+ if (parsekeys(value, mod_key, &mod, &ks) == 0) {
+ kfid = kf_invalid;
+ setkeybinding(mod, ks, kfid, NULL);
+ return (0);
+ } else
+ return (1);
+ }
+ /* search by key function name */
+ for (kfid = 0; kfid < kf_invalid; (kfid)++) {
+ if (strncasecmp(selector, keyfuncs[kfid].name,
+ SWM_FUNCNAME_LEN) == 0) {
+ DNPRINTF(SWM_D_KEY, "setconfbinding: %s: match\n",
+ selector);
+ if (parsekeys(value, mod_key, &mod, &ks) == 0) {
+ setkeybinding(mod, ks, kfid, NULL);
+ return (0);
+ } else
+ return (1);
+ }
+ }
+ /* search by custom spawn name */
+ for (i = 0; i < spawns_length; i++) {
+ if (strcasecmp(selector, spawns[i].name) == 0) {
+ DNPRINTF(SWM_D_KEY, "setconfbinding: %s: match\n",
+ selector);
+ if (parsekeys(value, mod_key, &mod, &ks) == 0) {
+ setkeybinding(mod, ks, kf_spawn_custom,
+ spawns[i].name);
+ return (0);
+ } else
+ return (1);
+ }
+ }
+ DNPRINTF(SWM_D_KEY, "setconfbinding: no match\n");
+ return (1);
+}
+
+void
+setup_keys(void)
+{
+ setkeybinding(MODKEY, XK_space, kf_cycle_layout,NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_space, kf_stack_reset, NULL);
+ setkeybinding(MODKEY, XK_h, kf_master_shrink,NULL);
+ setkeybinding(MODKEY, XK_l, kf_master_grow, NULL);
+ setkeybinding(MODKEY, XK_comma, kf_master_add, NULL);
+ setkeybinding(MODKEY, XK_period, kf_master_del, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_comma, kf_stack_inc, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_period, kf_stack_dec, NULL);
+ setkeybinding(MODKEY, XK_Return, kf_swap_main, NULL);
+ setkeybinding(MODKEY, XK_j, kf_focus_next, NULL);
+ setkeybinding(MODKEY, XK_k, kf_focus_prev, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_j, kf_swap_next, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_k, kf_swap_prev, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_Return, kf_spawn_term, NULL);
+ setkeybinding(MODKEY, XK_p, kf_spawn_custom, "menu");
+ setkeybinding(MODKEY|ShiftMask, XK_q, kf_quit, NULL);
+ setkeybinding(MODKEY, XK_q, kf_restart, NULL);
+ setkeybinding(MODKEY, XK_m, kf_focus_main, NULL);
+ setkeybinding(MODKEY, XK_1, kf_ws_1, NULL);
+ setkeybinding(MODKEY, XK_2, kf_ws_2, NULL);
+ setkeybinding(MODKEY, XK_3, kf_ws_3, NULL);
+ setkeybinding(MODKEY, XK_4, kf_ws_4, NULL);
+ setkeybinding(MODKEY, XK_5, kf_ws_5, NULL);
+ setkeybinding(MODKEY, XK_6, kf_ws_6, NULL);
+ setkeybinding(MODKEY, XK_7, kf_ws_7, NULL);
+ setkeybinding(MODKEY, XK_8, kf_ws_8, NULL);
+ setkeybinding(MODKEY, XK_9, kf_ws_9, NULL);
+ setkeybinding(MODKEY, XK_0, kf_ws_10, NULL);
+ setkeybinding(MODKEY, XK_Right, kf_ws_next, NULL);
+ setkeybinding(MODKEY, XK_Left, kf_ws_prev, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_Right, kf_screen_next, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_Left, kf_screen_prev, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_1, kf_mvws_1, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_2, kf_mvws_2, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_3, kf_mvws_3, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_4, kf_mvws_4, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_5, kf_mvws_5, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_6, kf_mvws_6, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_7, kf_mvws_7, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_8, kf_mvws_8, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_9, kf_mvws_9, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_0, kf_mvws_10, NULL);
+ setkeybinding(MODKEY, XK_b, kf_bar_toggle, NULL);
+ setkeybinding(MODKEY, XK_Tab, kf_focus_next, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_Tab, kf_focus_prev, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_x, kf_wind_kill, NULL);
+ setkeybinding(MODKEY, XK_x, kf_wind_del, NULL);
+ setkeybinding(MODKEY, XK_s, kf_spawn_custom, "screenshot_all");
+ setkeybinding(MODKEY|ShiftMask, XK_s, kf_spawn_custom, "screenshot_wind");
+ setkeybinding(MODKEY, XK_t, kf_float_toggle,NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_v, kf_version, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_Delete, kf_spawn_custom, "lock");
+ setkeybinding(MODKEY|ShiftMask, XK_i, kf_spawn_custom, "initscr");
+#ifdef SWM_DEBUG
+ setkeybinding(MODKEY|ShiftMask, XK_d, kf_dumpwins, NULL);
+#endif
+}
+
+void
+updatenumlockmask(void)
+{
+ unsigned int i, j;
+ XModifierKeymap *modmap;