From a99257ad9a2b0dc6a1190e6ca87863a7ec1973ea Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Sun, 3 Jul 2011 02:06:40 +0200 Subject: Key bindings \o/ --- data/default_config.cfg | 10 ++++++++++ src/common.py | 8 ++++++++ src/core.py | 3 ++- src/tabs.py | 5 ----- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/data/default_config.cfg b/data/default_config.cfg index 80ce9f35..53357009 100644 --- a/data/default_config.cfg +++ b/data/default_config.cfg @@ -189,6 +189,16 @@ send_time = true max_messages_in_memory = 2048 max_lines_in_memory = 2048 +[bindings] +# Bindings are keyboard shortcut aliases. You can use them +# to define your own keys and bind them with some functions +# The syntaxe is +# key = bind +# where ^x means Control + x +# and M-x means Alt + x +# The example turns Alt + i into a tab key +M-i = ^I + [var] # You should not edit this section, it is just used by poezio # to save various data across restarts diff --git a/src/common.py b/src/common.py index 9435dab5..0bc93c8d 100644 --- a/src/common.py +++ b/src/common.py @@ -42,6 +42,8 @@ import curses import time import shlex +from config import config + ROOM_STATE_NONE = 11 ROOM_STATE_CURRENT = 10 ROOM_STATE_PRIVATE = 15 @@ -211,3 +213,9 @@ def curses_color_pair(color): if color < 0: return curses.color_pair(-color) | curses.A_BOLD return curses.color_pair(color) + +def replace_key_with_bound(key): + if config.has_option('bindings', key): + return config.get(key, key, 'bindings') + else: + return key diff --git a/src/core.py b/src/core.py index 52b783bb..671834e4 100644 --- a/src/core.py +++ b/src/core.py @@ -677,7 +677,8 @@ class Core(object): """ # curses.ungetch(0) # FIXME while self.running: - char_list = self.read_keyboard() + char_list = [common.replace_key_with_bound(key)\ + for key in self.read_keyboard()] # Special case for M-x where x is a number if len(char_list) == 1: char = char_list[0] diff --git a/src/tabs.py b/src/tabs.py index 28ebd60d..8d4e6447 100644 --- a/src/tabs.py +++ b/src/tabs.py @@ -395,7 +395,6 @@ class MucTab(ChatTab): self.ignores = [] # set of Users # keys self.key_func['^I'] = self.completion - self.key_func['M-i'] = self.completion self.key_func['M-u'] = self.scroll_user_list_down self.key_func['M-y'] = self.scroll_user_list_up # commands @@ -979,7 +978,6 @@ class PrivateTab(ChatTab): self.input = windows.MessageInput() # keys self.key_func['^I'] = self.completion - self.key_func['M-i'] = self.completion # commands self.commands['unquery'] = (self.command_unquery, _("Usage: /unquery\nUnquery: close the tab"), None) self.commands['part'] = (self.command_unquery, _("Usage: /part\Part: close the tab"), None) @@ -1123,7 +1121,6 @@ class RosterInfoTab(Tab): self.input = self.default_help_message self.set_color_state(theme.COLOR_TAB_NORMAL) self.key_func['^I'] = self.completion - self.key_func['M-i'] = self.completion self.key_func[' '] = self.on_space self.key_func["/"] = self.on_slash self.key_func["KEY_UP"] = self.move_cursor_up @@ -1470,7 +1467,6 @@ class ConversationTab(ChatTab): self.input = windows.MessageInput() # keys self.key_func['^I'] = self.completion - self.key_func['M-i'] = self.completion # commands self.commands['unquery'] = (self.command_unquery, _("Usage: /unquery\nUnquery: close the tab"), None) self.commands['part'] = (self.command_unquery, _("Usage: /part\Part: close the tab"), None) @@ -1602,7 +1598,6 @@ class MucListTab(Tab): self.key_func["KEY_DOWN"] = self.listview.move_cursor_down self.key_func["KEY_UP"] = self.listview.move_cursor_up self.key_func['^I'] = self.completion - self.key_func['M-i'] = self.completion self.key_func["/"] = self.on_slash self.key_func['j'] = self.join_selected self.key_func['J'] = self.join_selected_no_focus -- cgit v1.2.3