Add option to use XEP-0392 for tab names/numbers in the infobar
This will autocolour the tabs based on their name (typically the JID) if a new message or highlight occured. If it was a normal new message, the colouring will be subtle (foreground instead of background), otherwise (on a highlight or 1:1 message), the colouring will affect the background and thus stand out much more.
This commit is contained in:
parent
be7542b8c8
commit
7b99fcfb2f
3 changed files with 26 additions and 0 deletions
|
@ -48,6 +48,7 @@ DEFAULT_CONFIG: ConfigDict = {
|
|||
'after_completion': ',',
|
||||
'alternative_nickname': '',
|
||||
'auto_reconnect': True,
|
||||
'autocolor_tab_names': False,
|
||||
'autorejoin_delay': '5',
|
||||
'autorejoin': False,
|
||||
'beep_on': 'highlight private invite disconnect',
|
||||
|
|
|
@ -233,6 +233,11 @@ class Theme:
|
|||
COLOR_TAB_ATTENTION = (7, 1)
|
||||
COLOR_TAB_DISCONNECTED = (7, 8)
|
||||
|
||||
# If autocolor_tab_names is set to true, the following modes are used to
|
||||
# distinguish tabs with normal and important messages.
|
||||
MODE_TAB_NORMAL = ''
|
||||
MODE_TAB_IMPORTANT = 'r' # reverse video mode
|
||||
|
||||
COLOR_VERTICAL_TAB_NORMAL = (4, -1)
|
||||
COLOR_VERTICAL_TAB_NONEMPTY = (4, -1)
|
||||
COLOR_VERTICAL_TAB_JOINED = (82, -1)
|
||||
|
|
|
@ -15,6 +15,7 @@ from poezio.config import config
|
|||
from poezio.windows.base_wins import Win
|
||||
from poezio.theming import get_theme, to_curses_attr
|
||||
from poezio.common import unique_prefix_of
|
||||
from poezio.colors import ccg_text_to_color
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
@ -38,6 +39,7 @@ class GlobalInfoBar(Win):
|
|||
use_nicks = config.getbool('use_tab_nicks')
|
||||
show_inactive = config.getbool('show_inactive_tabs')
|
||||
unique_prefix_tab_names = config.getbool('unique_prefix_tab_names')
|
||||
autocolor_tab_names = config.getbool('autocolor_tab_names')
|
||||
|
||||
if unique_prefix_tab_names:
|
||||
unique_prefixes: List[Optional[str]] = [None] * len(self.core.tabs)
|
||||
|
@ -73,6 +75,24 @@ class GlobalInfoBar(Win):
|
|||
if not show_inactive and color is theme.COLOR_TAB_NORMAL and (
|
||||
tab.priority < 0):
|
||||
continue
|
||||
if autocolor_tab_names:
|
||||
# TODO: in case of private MUC conversations, we should try to
|
||||
# get hold of more information to make the colour the same as
|
||||
# the nickname colour in the MUC.
|
||||
fgcolor, bgcolor, *flags = color
|
||||
# this is fugly, but I’m not sure how to improve it... since
|
||||
# apparently the state is only kept in the color -.-
|
||||
if (color == theme.COLOR_TAB_HIGHLIGHT or
|
||||
color == theme.COLOR_TAB_PRIVATE):
|
||||
fgcolor = ccg_text_to_color(theme.ccg_palette, tab.name)
|
||||
bgcolor = -1
|
||||
flags = theme.MODE_TAB_IMPORTANT
|
||||
elif color == theme.COLOR_TAB_NEW_MESSAGE:
|
||||
fgcolor = ccg_text_to_color(theme.ccg_palette, tab.name)
|
||||
bgcolor = -1
|
||||
flags = theme.MODE_TAB_NORMAL
|
||||
|
||||
color = (fgcolor, bgcolor) + tuple(flags)
|
||||
try:
|
||||
if show_nums or not show_names:
|
||||
self.addstr("%s" % str(nb), to_curses_attr(color))
|
||||
|
|
Loading…
Reference in a new issue