From 8b13d3c572ef230f3fcd8d12f1b7f4317193e637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Sch=C3=A4fer?= Date: Sun, 10 May 2020 15:08:10 +0200 Subject: [PATCH] Colourize tab name in its infobar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is for faster learning the colour <-> tab association and to see quickly in which tab you’re currently in. --- poezio/theming.py | 4 ++++ poezio/windows/info_wins.py | 40 ++++++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/poezio/theming.py b/poezio/theming.py index cc4ea34a..712a44ab 100755 --- a/poezio/theming.py +++ b/poezio/theming.py @@ -238,6 +238,10 @@ class Theme: MODE_TAB_NORMAL = '' MODE_TAB_IMPORTANT = 'r' # reverse video mode + # This is the mode used for the tab name in the info bar of MUC and 1:1 + # chat tabs. + MODE_TAB_NAME = 'r' + COLOR_VERTICAL_TAB_NORMAL = (4, -1) COLOR_VERTICAL_TAB_NONEMPTY = (4, -1) COLOR_VERTICAL_TAB_JOINED = (82, -1) diff --git a/poezio/windows/info_wins.py b/poezio/windows/info_wins.py index 23d28cc1..227dc115 100644 --- a/poezio/windows/info_wins.py +++ b/poezio/windows/info_wins.py @@ -16,6 +16,7 @@ from poezio.config import config from poezio.windows.base_wins import Win from poezio.ui.funcs import truncate_nick from poezio.theming import get_theme, to_curses_attr +from poezio.colors import ccg_text_to_color if TYPE_CHECKING: from poezio.user import User @@ -103,6 +104,9 @@ class PrivateInfoWin(InfoWin): to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) def write_room_name(self, name): + # TODO: autocolour this too, but we need more info about the occupant + # (whether we know its real jid) and the room (whether it is + # anonymous) to provide correct colouring. try: jid = JID(name) except InvalidJID: @@ -223,13 +227,23 @@ class ConversationInfoWin(InfoWin): """ Write the information about the contact """ - color = to_curses_attr(get_theme().COLOR_INFORMATION_BAR) + theme = get_theme() + color = to_curses_attr(theme.COLOR_INFORMATION_BAR) + if config.get('autocolor_tab_names') and contact is not None: + name_color = ( + ccg_text_to_color(theme.ccg_palette, str(contact.bare_jid)), + -1, + theme.MODE_TAB_NAME, + ) + else: + name_color = color + if not contact: self.addstr("(contact not in roster)", color) return display_name = contact.name if display_name: - self.addstr('%s ' % (display_name), color) + self.addstr('%s ' % (display_name), name_color) def write_contact_jid(self, jid): """ @@ -237,9 +251,17 @@ class ConversationInfoWin(InfoWin): """ theme = get_theme() color = to_curses_attr(theme.COLOR_INFORMATION_BAR) + if config.get('autocolor_tab_names'): + name_color = ( + ccg_text_to_color(theme.ccg_palette, str(contact.jid)), + -1, + theme.MODE_TAB_NAME, + ) + else: + name_color = theme.COLOR_CONVERSATION_NAME + self.addstr('[', color) - self.addstr(jid.full, - to_curses_attr(theme.COLOR_CONVERSATION_NAME)) + self.addstr(jid.full, to_curses_attr(name_color)) self.addstr('] ', color) def write_chatstate(self, state): @@ -313,9 +335,17 @@ class MucInfoWin(InfoWin): def write_room_name(self, room): theme = get_theme() color = to_curses_attr(theme.COLOR_INFORMATION_BAR) + label_color = theme.COLOR_GROUPCHAT_NAME + + if config.get('autocolor_tab_names'): + label_color = ccg_text_to_color( + theme.ccg_palette, + room.jid.bare, + ), -1, theme.MODE_TAB_NAME + self.addstr('[', color) self.addstr(room.name, - to_curses_attr(theme.COLOR_GROUPCHAT_NAME)) + to_curses_attr(label_color)) self.addstr(']', color) def write_participants_number(self, room):