From 18dbc880e1d72a09caec8163de4f80bf03f567e1 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Fri, 18 Nov 2011 18:26:15 +0100 Subject: Do not try to interpret keys as key shortcuts when pasting text. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoiding, for example, nickname completions when pasting a text containing the \t char. Also, pasting is a little because it doesn’t search an associated command for each pasted char. AWESOME. --- src/core.py | 8 ++++---- src/tabs.py | 29 ++++++++++++++++------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/core.py b/src/core.py index 6bfb4c63..8de694f7 100644 --- a/src/core.py +++ b/src/core.py @@ -808,12 +808,12 @@ class Core(object): if char in self.key_func: self.key_func[char]() else: - res = self.do_command(char) + res = self.do_command(char, False) if res: self.refresh_window() else: for char in char_list: - self.do_command(char) + self.do_command(char, True) self.refresh_window() self.doupdate() @@ -1807,10 +1807,10 @@ class Core(object): roster.save_to_config_file() config.set_and_save('info_win_height', self.information_win_size, 'var') - def do_command(self, key): + def do_command(self, key, raw): if not key: return - return self.current_tab().on_input(key) + return self.current_tab().on_input(key, raw) def on_roster_enter_key(self, roster_row): """ diff --git a/src/tabs.py b/src/tabs.py index 54ebb1a5..f1f4fa16 100644 --- a/src/tabs.py +++ b/src/tabs.py @@ -258,7 +258,10 @@ class Tab(object): """ return None - def on_input(self, key): + def on_input(self, key, raw): + """ + raw indicates if the key should activate the associated command or not. + """ pass def update_commands(self): @@ -934,8 +937,8 @@ class MucTab(ChatTab): self.info_win.refresh() self.input.refresh() - def on_input(self, key): - if key in self.key_func: + def on_input(self, key, raw): + if not raw and key in self.key_func: self.key_func[key]() return False self.input.do_command(key) @@ -1425,8 +1428,8 @@ class PrivateTab(ChatTab): def get_name(self): return self.name - def on_input(self, key): - if key in self.key_func: + def on_input(self, key, raw): + if not raw and key in self.key_func: self.key_func[key]() return False self.input.do_command(key) @@ -1897,7 +1900,7 @@ class RosterInfoTab(Tab): def get_name(self): return self.name - def on_input(self, key): + def on_input(self, key, raw): if key == '^M': selected_row = self.roster_win.get_selected_row() res = self.input.do_command(key) @@ -1906,7 +1909,7 @@ class RosterInfoTab(Tab): if key == '^M': self.core.on_roster_enter_key(selected_row) return selected_row - elif key in self.key_func: + elif not raw and key in self.key_func: return self.key_func[key]() def toggle_offline_show(self): @@ -2166,8 +2169,8 @@ class ConversationTab(ChatTab): def get_name(self): return self._name - def on_input(self, key): - if key in self.key_func: + def on_input(self, key, raw): + if not raw and key in self.key_func: self.key_func[key]() return False self.input.do_command(key) @@ -2351,11 +2354,11 @@ class MucListTab(Tab): if isinstance(self.input, windows.CommandInput): self.complete_commands(self.input) - def on_input(self, key): + def on_input(self, key, raw): res = self.input.do_command(key) if res: return True - if key in self.key_func: + if not raw and key in self.key_func: return self.key_func[key]() def on_lose_focus(self): @@ -2396,11 +2399,11 @@ class SimpleTextTab(Tab): self.input.resize(1, self.width, self.height-1, 0) self.input.do_command("/") # we add the slash - def on_input(self, key): + def on_input(self, key, raw): res = self.input.do_command(key) if res: return True - if key in self.key_func: + if not raw and key in self.key_func: return self.key_func[key]() def close(self): -- cgit v1.2.3