2001-09-12 Gergely Nagy * src/actions.c (find_command_by_keydesc): new function (cmd_symbind): new function (user_commands, initialize_default_keybindings): use it * src/actions.h: define cmd_symbind diff -urad ratpoison.orig/src/actions.c ratpoison/src/actions.c --- ratpoison.orig/src/actions.c Sun Sep 9 22:32:17 2001 +++ ratpoison/src/actions.c Wed Sep 12 13:57:41 2001 @@ -65,6 +65,7 @@ {"version", cmd_version, arg_VOID}, {"vsplit", cmd_v_split, arg_VOID}, {"windows", cmd_windows, arg_VOID}, + {"symbind", cmd_symbind, arg_STRING}, /* Commands to set default behavior. */ {"defbarloc", cmd_defbarloc, arg_STRING}, @@ -108,7 +109,7 @@ {"startup_message", cmd_unimplemented, arg_VOID}, {"stuff", cmd_unimplemented, arg_VOID}, #endif - {0, 0, 0} }; + {0, 0, 0} }; rp_action* find_keybinding_by_action (char *action) @@ -139,6 +140,28 @@ return NULL; } +static char * +find_command_by_keydesc (char *desc) +{ + int i; + char *keysym_name; + + while (i < key_actions_last) + { + keysym_name = keysym_to_string (key_actions[i].key, key_actions[i].state); + if (!strcmp (keysym_name, desc)) + { + free (keysym_name); + return key_actions[i].data; + } + free (keysym_name); + i++; + } + + return NULL; +} + + static void add_keybinding (KeySym keysym, int state, char *cmd) { @@ -222,45 +245,45 @@ add_keybinding (XK_9, 0, "select 9"); add_keybinding (XK_minus, 0, "select -"); add_keybinding (XK_A, 0, "title"); - add_keybinding (XK_A, ControlMask, "title"); + add_keybinding (XK_A, ControlMask, "symbind A"); add_keybinding (XK_K, 0, "kill"); - add_keybinding (XK_K, ControlMask, "kill"); + add_keybinding (XK_K, ControlMask, "symbind K"); add_keybinding (XK_Return, 0, "next"); - add_keybinding (XK_Return, ControlMask, "next"); + add_keybinding (XK_Return, ControlMask, "symbind Return"); add_keybinding (XK_a, 0, "clock"); - add_keybinding (XK_a, ControlMask, "clock"); + add_keybinding (XK_a, ControlMask, "symbind a"); add_keybinding (XK_b, 0, "banish"); - add_keybinding (XK_b, ControlMask, "banish"); + add_keybinding (XK_b, ControlMask, "symbind b"); add_keybinding (XK_c, 0, "exec " TERM_PROG); - add_keybinding (XK_c, ControlMask, "exec " TERM_PROG); + add_keybinding (XK_c, ControlMask, "symbind c"); add_keybinding (XK_colon, 0, "colon"); - add_keybinding (XK_exclam, 0, "exec"); - add_keybinding (XK_exclam, ControlMask, "colon exec " TERM_PROG " -e "); + add_keybinding (XK_exclam, 0, "exec" TERM_PROG " -e "); + add_keybinding (XK_exclam, ControlMask, "symbind exclam"); add_keybinding (XK_k, 0, "delete"); - add_keybinding (XK_k, ControlMask, "delete"); + add_keybinding (XK_k, ControlMask, "symbind k"); add_keybinding (XK_m, 0, "maximize"); - add_keybinding (XK_m, ControlMask, "maximize"); + add_keybinding (XK_m, ControlMask, "symbind m"); add_keybinding (XK_n, 0, "next"); - add_keybinding (XK_n, ControlMask, "next"); + add_keybinding (XK_n, ControlMask, "symbind n"); add_keybinding (XK_p, 0, "prev"); - add_keybinding (XK_p, ControlMask, "prev"); + add_keybinding (XK_p, ControlMask, "symbind p"); add_keybinding (XK_quoteright, 0, "select"); - add_keybinding (XK_quoteright, ControlMask, "select"); - add_keybinding (XK_space, 0, "next"); - add_keybinding (XK_space, ControlMask, "next"); + add_keybinding (XK_quoteright, ControlMask, "symbind apostrophe"); + add_keybinding (XK_space, 0, "symbind Return"); + add_keybinding (XK_space, ControlMask, "symbind space"); add_keybinding (XK_v, 0, "version"); - add_keybinding (XK_v, ControlMask, "version"); + add_keybinding (XK_v, ControlMask, "symbind v"); add_keybinding (XK_w, 0, "windows"); - add_keybinding (XK_w, ControlMask, "windows"); + add_keybinding (XK_w, ControlMask, "symbind w"); add_keybinding (XK_s, 0, "split"); - add_keybinding (XK_s, ControlMask, "split"); + add_keybinding (XK_s, ControlMask, "symbind s"); add_keybinding (XK_S, 0, "vsplit"); - add_keybinding (XK_S, ControlMask, "vsplit"); + add_keybinding (XK_S, ControlMask, "symbind S"); add_keybinding (XK_Tab, 0, "focus"); add_keybinding (XK_Q, 0, "only"); add_keybinding (XK_R, 0, "remove"); add_keybinding (XK_f, 0, "curframe"); - add_keybinding (XK_f, ControlMask, "curframe"); + add_keybinding (XK_f, ControlMask, "symbind f"); add_keybinding (XK_question, 0, "help"); } @@ -1762,6 +1785,23 @@ XSetWindowBackground (dpy, screens[i].input_window, color.pixel); XSetWindowBackground (dpy, screens[i].frame_window, color.pixel); XSetWindowBackground (dpy, screens[i].help_window, color.pixel); + } + + return NULL; +} + +char * +cmd_symbind (int interactive, void *data) +{ + char *cmd = NULL; + + if (!data) + return NULL; + + cmd = find_command_by_keydesc ((char *)data); + if (cmd) + { + command (interactive, cmd); } return NULL; diff -urad ratpoison.orig/src/actions.h ratpoison/src/actions.h --- ratpoison.orig/src/actions.h Sun Sep 9 22:32:17 2001 +++ ratpoison/src/actions.h Wed Sep 12 13:34:30 2001 @@ -90,6 +90,7 @@ char * cmd_defwinname (int interactive, void *data); char * cmd_deffgcolor (int interactive, void *data); char * cmd_defbgcolor (int interactive, void *data); +char * cmd_symbind (int interactive, void *data); /* void cmd_xterm (void *data); */