From 1c29b39a6e882a7e5dd262ed1f5602740bcdd199 Mon Sep 17 00:00:00 2001 From: mathieui Date: Thu, 26 Jul 2012 12:57:42 +0200 Subject: [PATCH] Add a /runkey command This allows the user to run the action defined on a key without having to press that key. The completion completes all the available keys that will have an effect. --- doc/en/usage.txt | 3 +++ src/core.py | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/doc/en/usage.txt b/doc/en/usage.txt index c6d7359a..1758308c 100644 --- a/doc/en/usage.txt +++ b/doc/en/usage.txt @@ -318,6 +318,9 @@ These commands work in *any* tab. "/bind ^H KEY_UP" makes Control + h behave the same way as the Up key. See the link:keys.html[key bindings documentation page] for more details. + */runkey *:: Execute the action defined for _key_. For example, + "/runkey KEY_PPAGE" will scroll up, or "/runkey ^N" will go to the next tab. + NOTE: The following command will work everywhere, except in the Roster tab. */close*:: Close the tab. diff --git a/src/core.py b/src/core.py index 9de580b8..27b8c880 100644 --- a/src/core.py +++ b/src/core.py @@ -177,6 +177,7 @@ class Core(object): 'bookmarks': (self.command_bookmarks, _("Usage: /bookmarks\nBookmarks: Show the current bookmarks."), None), 'remove_bookmark': (self.command_remove_bookmark, _("Usage: /remove_bookmark [jid]\nRemove Bookmark: Remove the specified bookmark, or the bookmark on the current tab, if any."), self.completion_remove_bookmark), 'xml_tab': (self.command_xml_tab, _("Usage: /xml_tab\nXML Tab: Open an XML tab."), None), + 'runkey': (self.command_runkey, _("Usage: /runkey \nRunkey: Execute the action defined for ."), self.completion_runkey), } # We are invisible @@ -1162,6 +1163,32 @@ class Core(object): commands = list(self.commands.keys()) + list(self.current_tab().commands.keys()) return the_input.auto_completion(commands, ' ', quotify=False) + def command_runkey(self, arg): + """ + /runkey + """ + def replace_line_breaks(key): + if key == '^J': + return '\n' + return key + char = arg.strip() + func = self.key_func.get(char, None) + if func: + func() + else: + res = self.do_command(replace_line_breaks(char), False) + if res: + self.refresh_window() + + def completion_runkey(self, the_input): + """ + Completion for /runkey + """ + list_ = [] + list_.extend(self.key_func.keys()) + list_.extend(self.current_tab().key_func.keys()) + return the_input.auto_completion(list_, '', quotify=False) + def command_status(self, arg): """ /status [msg]