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):