diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2011-08-09 14:56:15 +0200 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2011-08-09 14:56:15 +0200 |
commit | fe9aee25a5de346e01e7992aba373870eb6f0b4f (patch) | |
tree | 4fc37ff83a3e2100681de030d4727203440f9ce1 /src | |
parent | 40c5eb207da9d40133eec57b499c4f9b56c4ac37 (diff) | |
download | weechat-fe9aee25a5de346e01e7992aba373870eb6f0b4f.zip |
core: allow send of hsignal instead of command for keys in context "mouse"
Diffstat (limited to 'src')
-rw-r--r-- | src/core/wee-command.c | 5 | ||||
-rw-r--r-- | src/gui/gui-key.c | 74 |
2 files changed, 50 insertions, 29 deletions
diff --git a/src/core/wee-command.c b/src/core/wee-command.c index 069cd3941..5ad50b6ee 100644 --- a/src/core/wee-command.c +++ b/src/core/wee-command.c @@ -5677,7 +5677,10 @@ command_init () " item(*): any bar item\n" " item(xxx): bar item \"xxx\"\n" "The key can start or end with '*' to match many mouse " - "events.\n\n" + "events.\n" + "A special value for command wit format \"hsignal:name\" " + "can be used for context mouse, this will send the hsignal " + "\"name\" with the focus hashtable as argument.\n\n" "Examples:\n" " key alt-x to toggle nicklist bar:\n" " /key bind meta-x /bar toggle nicklist\n" diff --git a/src/gui/gui-key.c b/src/gui/gui-key.c index 32a7879d4..6e70d072a 100644 --- a/src/gui/gui-key.c +++ b/src/gui/gui-key.c @@ -739,10 +739,13 @@ gui_key_focus_command (const char *key, int context, struct t_gui_focus_info *focus_info2) { struct t_gui_key *ptr_key; - int i, errors, matching, area_type; + int i, errors, matching, area_type, debug; char *pos, *command, **commands, *area_name; struct t_hashtable *hashtable; + debug = ((gui_cursor_debug && (context == GUI_KEY_CONTEXT_CURSOR)) + || (gui_mouse_debug && (context == GUI_KEY_CONTEXT_MOUSE))); + for (ptr_key = gui_keys[context]; ptr_key; ptr_key = ptr_key->next_key) { @@ -771,49 +774,64 @@ gui_key_focus_command (const char *key, int context, hashtable = hook_focus_get_data (focus_info1, focus_info2, key); - if (gui_cursor_debug || gui_mouse_debug) + if (debug) { gui_chat_printf (NULL, "Hashtable focus: %s", hashtable_get_string (hashtable, "keys_values_sorted")); } - command = string_replace_with_hashtable (ptr_key->command, - hashtable, - &errors); - if (command) + if (string_strncasecmp (ptr_key->command, "hsignal:", 8) == 0) { - if (errors == 0) + if (ptr_key->command[8]) { - if (gui_cursor_debug || gui_mouse_debug) - { - gui_chat_printf (NULL, - "Command executed: %s (%s)", - command, ptr_key->command); - } - if ((context == GUI_KEY_CONTEXT_CURSOR) && gui_cursor_debug) + if (debug) { - gui_input_delete_line (gui_current_window->buffer); + gui_chat_printf (NULL, "Sending hsignal \"%s\"", + ptr_key->command + 8); } - commands = string_split_command (command, ';'); - if (commands) + hook_hsignal_send (ptr_key->command + 8, hashtable); + } + } + else + { + command = string_replace_with_hashtable (ptr_key->command, + hashtable, + &errors); + if (command) + { + if (errors == 0) { - for (i = 0; commands[i]; i++) + if (debug) { - input_data (gui_current_window->buffer, commands[i]); + gui_chat_printf (NULL, + "Executing command: %s (%s)", + command, ptr_key->command); + } + if ((context == GUI_KEY_CONTEXT_CURSOR) && gui_cursor_debug) + { + gui_input_delete_line (gui_current_window->buffer); + } + commands = string_split_command (command, ';'); + if (commands) + { + for (i = 0; commands[i]; i++) + { + input_data (gui_current_window->buffer, commands[i]); + } + string_free_split_command (commands); } - string_free_split_command (commands); } - } - else - { - if (gui_cursor_debug || gui_mouse_debug) + else { - gui_chat_printf (NULL, - "Command NOT executed (%s)", - ptr_key->command); + if (debug) + { + gui_chat_printf (NULL, + "Command NOT executed (%s)", + ptr_key->command); + } } + free (command); } - free (command); } if (hashtable) hashtable_free (hashtable); |