From 266ba884e50b550122fefb568888fb5d1f91fba7 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Sat, 15 Dec 2012 19:51:07 +0100 Subject: Make /w command better. fix #2185 --- src/core.py | 10 ++++++---- src/tabs.py | 22 +++++++++++++++++++++- src/windows.py | 1 + 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/core.py b/src/core.py index da0585a4..e74ecd01 100644 --- a/src/core.py +++ b/src/core.py @@ -1509,15 +1509,17 @@ class Core(object): self.current_tab_nb = nb else: for tab in self.tabs: - if nb in safeJID(tab.get_name()).user: - self.current_tab_nb = tab.nb + for name in tab.matching_names(): + if nb in name: + self.current_tab_nb = tab.nb self.current_tab().on_gain_focus() self.refresh_window() def completion_win(self, the_input): """Completion for /win""" - l = [safeJID(tab.get_name()).user for tab in self.tabs] - l.remove('') + l = [] + for tab in self.tabs: + l.extend(tab.matching_names()) return the_input.auto_completion(l, ' ', quotify=False) def command_move_tab(self, arg): diff --git a/src/tabs.py b/src/tabs.py index f604eca2..c9c5d153 100644 --- a/src/tabs.py +++ b/src/tabs.py @@ -366,6 +366,15 @@ class Tab(object): if self.input: self.input.on_delete() + def matching_names(self): + """ + Returns a list of strings that are used to name a tab with the /win + command. For example you could switch to a tab that returns + ['hello', 'coucou'] using /win hel, or /win coucou + If not implemented in the tab, it just doesn’t match with anything. + """ + return [] + def __del__(self): log.debug('------ Closing tab %s', self.__class__.__name__) @@ -1632,6 +1641,9 @@ class MucTab(ChatTab): self._text_buffer.add_message(txt, time, nickname, nick_color, history, user, highlight=highlight, identifier=identifier) return highlight + def matching_names(self): + return [safeJID(self.get_name()).user] + class PrivateTab(ChatTab): """ The tab containg a private conversation (someone from a MUC) @@ -1900,6 +1912,9 @@ class PrivateTab(ChatTab): user=forced_user, identifier=identifier) + def matching_names(self): + return [safeJID(self.get_name()).resource] + class RosterInfoTab(Tab): """ A tab, splitted in two, containing the roster and infos @@ -2972,6 +2987,12 @@ class ConversationTab(ChatTab): user=forced_user, identifier=identifier) + def matching_names(self): + contact = roster[self.get_name()] + res = [contact.bare_jid if contact else safeJID(self.get_name()).bare] + if contact and contact.name: + res.append(contact.name) + return res class MucListTab(Tab): """ @@ -3143,7 +3164,6 @@ class MucListTab(Tab): self.core.doupdate() class XMLTab(Tab): - def __init__(self): Tab.__init__(self) self.state = 'normal' diff --git a/src/windows.py b/src/windows.py index e8f4ce8f..bc697300 100644 --- a/src/windows.py +++ b/src/windows.py @@ -504,6 +504,7 @@ class ConversationInfoWin(InfoWin): """ for key in informations: self.addstr(informations[key](jid), to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + def write_resource_information(self, resource): """ Write the informations about the resource -- cgit v1.2.3