mirror of
https://github.com/powerline/powerline.git
synced 2025-07-20 20:34:56 +02:00
Replace segment-local modes with highlight_group_prefix option
Fixes #1046
This commit is contained in:
parent
b7504c7178
commit
1a5bbbea96
@ -40,11 +40,6 @@ resulting segment. In addition to :ref:`usual keys that describe segment
|
||||
<dev-segments-segment>` the following keys may be present (it is advised that
|
||||
*only* the following keys will be used):
|
||||
|
||||
.. _dev-listers-mode:
|
||||
|
||||
``mode``
|
||||
Segment-specific mode. Used to alter segment highlighting.
|
||||
|
||||
``priority_multiplier``
|
||||
Value (usually a ``float``) used to multiply segment priority. It is useful
|
||||
for finer-grained controlling which segments disappear first: e.g. when
|
||||
|
@ -228,6 +228,12 @@ Segment dictionary contains the following keys:
|
||||
``highlight_group``, ``divider_highlight_group``
|
||||
Used highlight groups. May be ``None``.
|
||||
|
||||
``highlight_group_prefix``
|
||||
If this key is present then given prefix will be prepended to each highlight
|
||||
group (both regular and divider) used by this segment in a form
|
||||
``{prefix}:{group}`` (note the colon). This key is mostly useful for
|
||||
:ref:`segment listers <dev-listers>`.
|
||||
|
||||
.. _dev-segments-seg-around:
|
||||
|
||||
``before``, ``after``
|
||||
@ -281,9 +287,6 @@ Segment dictionary contains the following keys:
|
||||
``shutdown``
|
||||
:ref:`Shutdown function <dev-segments-shutdown>`. Accepts no argument.
|
||||
|
||||
``mode``
|
||||
:ref:`Segment-specific mode <dev-listers-mode>`. May be ``None``.
|
||||
|
||||
Segments layout
|
||||
===============
|
||||
|
||||
|
@ -17,6 +17,15 @@
|
||||
"many_tabs": "line_current",
|
||||
"bufnr": "file_directory",
|
||||
"winnr": "information:unimportant",
|
||||
"tabnr": "file_directory"
|
||||
"tabnr": "file_directory",
|
||||
|
||||
"tab_nc:file_directory": "information:unimportant",
|
||||
"tab_nc:file_name": "tab_nc:file_directory",
|
||||
"tab_nc:tabnr": "tab_nc:file_directory",
|
||||
|
||||
"buf_nc:file_directory": "tab_nc:file_directory",
|
||||
"buf_nc:file_name": "tab_nc:file_name",
|
||||
"buf_nc:bufnr": "tab_nc:tabnr",
|
||||
"buf_nc:modified_indicator": "tab_nc:modified_indicator"
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,9 @@
|
||||
"attached_clients": { "fg": "gray8", "bg": "gray2", "attr": [] },
|
||||
"error": { "fg": "brightestred", "bg": "darkred", "attr": ["bold"] },
|
||||
"warning": { "fg": "brightyellow", "bg": "darkorange", "attr": ["bold"] },
|
||||
"current_tag": { "fg": "gray9", "bg": "gray2", "attr": [] }
|
||||
"current_tag": { "fg": "gray9", "bg": "gray2", "attr": [] },
|
||||
|
||||
"tab_nc:modified_indicator": { "fg": "brightyellow", "bg": "gray2", "attr": ["bold"] }
|
||||
},
|
||||
"mode_translations": {
|
||||
"nc": {
|
||||
@ -52,44 +54,6 @@
|
||||
"dark_green_gray": "gray5"
|
||||
}
|
||||
},
|
||||
"tab_nc": {
|
||||
"colors": {
|
||||
"brightyellow": "darkorange",
|
||||
"brightestred": "darkred",
|
||||
"gray0": "gray0",
|
||||
"gray1": "gray0",
|
||||
"gray2": "gray0",
|
||||
"gray3": "gray1",
|
||||
"gray4": "gray1",
|
||||
"gray5": "gray1",
|
||||
"gray6": "gray1",
|
||||
"gray7": "gray4",
|
||||
"gray8": "gray4",
|
||||
"gray9": "gray4",
|
||||
"gray10": "gray5",
|
||||
"white": "gray6",
|
||||
"dark_green_gray": "gray5"
|
||||
}
|
||||
},
|
||||
"buf_nc": {
|
||||
"colors": {
|
||||
"brightyellow": "darkorange",
|
||||
"brightestred": "darkred",
|
||||
"gray0": "gray0",
|
||||
"gray1": "gray0",
|
||||
"gray2": "gray0",
|
||||
"gray3": "gray1",
|
||||
"gray4": "gray1",
|
||||
"gray5": "gray1",
|
||||
"gray6": "gray1",
|
||||
"gray7": "gray4",
|
||||
"gray8": "gray4",
|
||||
"gray9": "gray4",
|
||||
"gray10": "gray5",
|
||||
"white": "gray6",
|
||||
"dark_green_gray": "gray5"
|
||||
}
|
||||
},
|
||||
"i": {
|
||||
"colors": {
|
||||
"gray0": "darkestblue",
|
||||
|
@ -44,26 +44,6 @@
|
||||
"solarized:base3": "solarized:base1"
|
||||
}
|
||||
},
|
||||
"tab_nc": {
|
||||
"colors": {
|
||||
"solarized:base01": "solarized:base02",
|
||||
"solarized:base00": "solarized:base02",
|
||||
"solarized:base0": "solarized:base01",
|
||||
"solarized:base1": "solarized:base00",
|
||||
"solarized:base2": "solarized:base0",
|
||||
"solarized:base3": "solarized:base1"
|
||||
}
|
||||
},
|
||||
"buf_nc": {
|
||||
"colors": {
|
||||
"solarized:base01": "solarized:base02",
|
||||
"solarized:base00": "solarized:base02",
|
||||
"solarized:base0": "solarized:base01",
|
||||
"solarized:base1": "solarized:base00",
|
||||
"solarized:base2": "solarized:base0",
|
||||
"solarized:base3": "solarized:base1"
|
||||
}
|
||||
},
|
||||
"i": {
|
||||
"groups": {
|
||||
"background": { "fg": "solarized:base3", "bg": "solarized:base01", "attr": [] },
|
||||
|
@ -43,26 +43,6 @@
|
||||
"solarized:base03": "solarized:base1"
|
||||
}
|
||||
},
|
||||
"tab_nc": {
|
||||
"colors": {
|
||||
"solarized:base2": "solarized:base01",
|
||||
"solarized:base0": "solarized:base01",
|
||||
"solarized:base00": "solarized:base2",
|
||||
"solarized:base1": "solarized:base0",
|
||||
"solarized:base02": "solarized:base00",
|
||||
"solarized:base03": "solarized:base1"
|
||||
}
|
||||
},
|
||||
"buf_nc": {
|
||||
"colors": {
|
||||
"solarized:base2": "solarized:base01",
|
||||
"solarized:base0": "solarized:base01",
|
||||
"solarized:base00": "solarized:base2",
|
||||
"solarized:base1": "solarized:base0",
|
||||
"solarized:base02": "solarized:base00",
|
||||
"solarized:base03": "solarized:base1"
|
||||
}
|
||||
},
|
||||
"i": {
|
||||
"groups": {
|
||||
"background": { "fg": "solarized:base03", "bg": "solarized:base2", "attr": [] },
|
||||
|
@ -10,7 +10,7 @@ except ImportError:
|
||||
vim = {}
|
||||
|
||||
|
||||
def tabpage_updated_segment_info(segment_info, tabpage, mode):
|
||||
def tabpage_updated_segment_info(segment_info, tabpage):
|
||||
segment_info = segment_info.copy()
|
||||
window = tabpage.window
|
||||
buffer = window.buffer
|
||||
@ -22,7 +22,6 @@ def tabpage_updated_segment_info(segment_info, tabpage, mode):
|
||||
window_id=int(window.vars.get('powerline_window_id', -1)),
|
||||
buffer=buffer,
|
||||
bufnr=buffer.number,
|
||||
mode=mode,
|
||||
)
|
||||
return segment_info
|
||||
|
||||
@ -35,8 +34,7 @@ def tablister(pl, segment_info, **kwargs):
|
||||
``winnr``, ``window_id``, ``buffer`` and ``bufnr`` keys set to tab-local
|
||||
ones and additional ``tabpage`` and ``tabnr`` keys.
|
||||
|
||||
Sets segment ``mode`` to either ``tab`` (for current tab page) or ``tab_nc``
|
||||
(for all other tab pages).
|
||||
Adds either ``tab:`` or ``tab_nc:`` prefix to all segment highlight groups.
|
||||
|
||||
Works best with vim-7.4 or later: earlier versions miss tabpage object and
|
||||
thus window objects are not available as well.
|
||||
@ -49,15 +47,15 @@ def tablister(pl, segment_info, **kwargs):
|
||||
return dct
|
||||
|
||||
return (
|
||||
(lambda tabpage, mode: (
|
||||
tabpage_updated_segment_info(segment_info, tabpage, mode),
|
||||
add_multiplier(tabpage, {'mode': mode})
|
||||
(lambda tabpage, prefix: (
|
||||
tabpage_updated_segment_info(segment_info, tabpage),
|
||||
add_multiplier(tabpage, {'highlight_group_prefix': prefix})
|
||||
))(tabpage, 'tab' if tabpage == cur_tabpage else 'tab_nc')
|
||||
for tabpage in list_tabpages()
|
||||
)
|
||||
|
||||
|
||||
def buffer_updated_segment_info(segment_info, buffer, mode):
|
||||
def buffer_updated_segment_info(segment_info, buffer):
|
||||
segment_info = segment_info.copy()
|
||||
segment_info.update(
|
||||
window=None,
|
||||
@ -65,7 +63,6 @@ def buffer_updated_segment_info(segment_info, buffer, mode):
|
||||
window_id=None,
|
||||
buffer=buffer,
|
||||
bufnr=buffer.number,
|
||||
mode=mode,
|
||||
)
|
||||
return segment_info
|
||||
|
||||
@ -78,8 +75,7 @@ def bufferlister(pl, segment_info, show_unlisted=False, **kwargs):
|
||||
and ``bufnr`` keys set to buffer-specific ones, ``window``, ``winnr`` and
|
||||
``window_id`` keys set to None.
|
||||
|
||||
Sets segment ``mode`` to either ``buf`` (for current buffer) or ``buf_nc``
|
||||
(for all other buffers).
|
||||
Adds either ``buf:`` or ``buf_nc:`` prefix to all segment highlight groups.
|
||||
|
||||
:param bool show_unlisted:
|
||||
True if unlisted buffers should be shown as well. Current buffer is
|
||||
@ -95,12 +91,14 @@ def bufferlister(pl, segment_info, show_unlisted=False, **kwargs):
|
||||
return (
|
||||
(
|
||||
buf_segment_info,
|
||||
add_multiplier(buf_segment_info['buffer'], {'mode': buf_segment_info['mode']})
|
||||
add_multiplier(buf_segment_info['buffer'], {'highlight_group_prefix': prefix})
|
||||
)
|
||||
for buf_segment_info in (
|
||||
buffer_updated_segment_info(
|
||||
segment_info,
|
||||
buffer,
|
||||
for buf_segment_info, prefix in (
|
||||
(
|
||||
buffer_updated_segment_info(
|
||||
segment_info,
|
||||
buffer
|
||||
),
|
||||
('buf' if buffer is cur_buffer else 'buf_nc')
|
||||
)
|
||||
for buffer in vim.buffers
|
||||
|
@ -123,7 +123,7 @@ def process_segment_lister(pl, segment_info, parsed_segments, side, mode, colors
|
||||
subsegment_info,
|
||||
parsed_segments,
|
||||
subsegment,
|
||||
subsegment_update.get('mode', mode),
|
||||
mode,
|
||||
colorscheme,
|
||||
)
|
||||
new_pslen = len(parsed_segments)
|
||||
@ -133,17 +133,23 @@ def process_segment_lister(pl, segment_info, parsed_segments, side, mode, colors
|
||||
return None
|
||||
|
||||
|
||||
def set_segment_highlighting(pl, colorscheme, segment):
|
||||
def set_segment_highlighting(pl, colorscheme, segment, mode):
|
||||
try:
|
||||
highlight_group_prefix = segment['highlight_group_prefix']
|
||||
except KeyError:
|
||||
hl_groups = lambda hlgs: hlgs
|
||||
else:
|
||||
hl_groups = lambda hlgs: [highlight_group_prefix + ':' + hlg for hlg in hlgs] + hlgs
|
||||
try:
|
||||
segment['highlight'] = colorscheme.get_highlighting(
|
||||
segment['highlight_group'],
|
||||
segment['mode'],
|
||||
hl_groups(segment['highlight_group']),
|
||||
mode,
|
||||
segment.get('gradient_level')
|
||||
)
|
||||
if segment['divider_highlight_group']:
|
||||
segment['divider_highlight'] = colorscheme.get_highlighting(
|
||||
(segment['divider_highlight_group'],),
|
||||
segment['mode']
|
||||
hl_groups([segment['divider_highlight_group']]),
|
||||
mode
|
||||
)
|
||||
else:
|
||||
segment['divider_highlight'] = None
|
||||
@ -156,7 +162,6 @@ def set_segment_highlighting(pl, colorscheme, segment):
|
||||
|
||||
def process_segment(pl, side, segment_info, parsed_segments, segment, mode, colorscheme):
|
||||
segment = segment.copy()
|
||||
segment['mode'] = mode
|
||||
pl.prefix = segment['name']
|
||||
if segment['type'] in ('function', 'segment_list'):
|
||||
try:
|
||||
@ -202,14 +207,14 @@ def process_segment(pl, side, segment_info, parsed_segments, segment, mode, colo
|
||||
if draw_inner_divider is not None:
|
||||
segment_copy['draw_soft_divider'] = draw_inner_divider
|
||||
draw_inner_divider = segment_copy.pop('draw_inner_divider', None)
|
||||
if set_segment_highlighting(pl, colorscheme, segment_copy):
|
||||
if set_segment_highlighting(pl, colorscheme, segment_copy, mode):
|
||||
append(segment_copy)
|
||||
else:
|
||||
segment['contents'] = contents
|
||||
if set_segment_highlighting(pl, colorscheme, segment):
|
||||
if set_segment_highlighting(pl, colorscheme, segment, mode):
|
||||
parsed_segments.append(segment)
|
||||
elif segment['width'] == 'auto' or (segment['type'] == 'string' and segment['contents'] is not None):
|
||||
if set_segment_highlighting(pl, colorscheme, segment):
|
||||
if set_segment_highlighting(pl, colorscheme, segment, mode):
|
||||
parsed_segments.append(segment)
|
||||
|
||||
|
||||
@ -356,7 +361,6 @@ def gen_segment_getter(pl, ext, common_config, theme_configs, default_module, ge
|
||||
'truncate': None,
|
||||
'startup': None,
|
||||
'shutdown': None,
|
||||
'mode': None,
|
||||
'_rendered_raw': '',
|
||||
'_rendered_hl': '',
|
||||
'_len': None,
|
||||
@ -405,7 +409,6 @@ def gen_segment_getter(pl, ext, common_config, theme_configs, default_module, ge
|
||||
'truncate': truncate_func,
|
||||
'startup': startup_func,
|
||||
'shutdown': shutdown_func,
|
||||
'mode': None,
|
||||
'_rendered_raw': '',
|
||||
'_rendered_hl': '',
|
||||
'_len': None,
|
||||
|
@ -135,7 +135,6 @@ class Theme(object):
|
||||
for side in [side] if side else ['left', 'right']:
|
||||
parsed_segments = []
|
||||
for segment in self.segments[line][side]:
|
||||
# No segment-local modes at this point
|
||||
if segment['display_condition'](self.pl, segment_info, mode):
|
||||
process_segment(
|
||||
self.pl,
|
||||
|
@ -16,7 +16,7 @@ catch
|
||||
cquit
|
||||
endtry
|
||||
|
||||
if result isnot# '%#Pl_240_5789784_235_2500134_NONE# 1 %#Pl_240_5789784_235_2500134_NONE#./%#Pl_244_8421504_235_2500134_bold#abc %#Pl_244_8421504_235_2500134_NONE# %#Pl_240_5789784_235_2500134_NONE#2 %#Pl_240_5789784_235_2500134_NONE#./%#Pl_244_8421504_235_2500134_bold#def %#Pl_235_2500134_240_5789784_NONE# %#Pl_250_12369084_240_5789784_NONE#./%#Pl_231_16777215_240_5789784_bold#ghi %#Pl_240_5789784_236_3158064_NONE# %#Pl_231_16777215_236_3158064_NONE# %#Pl_252_13684944_236_3158064_NONE# %#Pl_235_2500134_252_13684944_bold# Tabs '
|
||||
if result isnot# '%#Pl_247_10395294_236_3158064_NONE# 1 %#Pl_247_10395294_236_3158064_NONE#./%#Pl_247_10395294_236_3158064_NONE#abc %#Pl_247_10395294_236_3158064_NONE# %#Pl_247_10395294_236_3158064_NONE#2 %#Pl_247_10395294_236_3158064_NONE#./%#Pl_247_10395294_236_3158064_NONE#def %#Pl_236_3158064_240_5789784_NONE# %#Pl_250_12369084_240_5789784_NONE#./%#Pl_231_16777215_240_5789784_bold#ghi %#Pl_240_5789784_236_3158064_NONE# %#Pl_231_16777215_236_3158064_NONE# %#Pl_252_13684944_236_3158064_NONE# %#Pl_235_2500134_252_13684944_bold# Tabs '
|
||||
call writefile(['Unexpected tabline', result], 'message.fail')
|
||||
cquit
|
||||
endif
|
||||
@ -30,7 +30,7 @@ catch
|
||||
cquit
|
||||
endtry
|
||||
|
||||
if result isnot# '%#Pl_240_5789784_235_2500134_NONE# 1 %#Pl_240_5789784_235_2500134_NONE#./%#Pl_244_8421504_235_2500134_bold#abc %#Pl_244_8421504_235_2500134_NONE# %#Pl_240_5789784_235_2500134_NONE#2 %#Pl_240_5789784_235_2500134_NONE#./%#Pl_244_8421504_235_2500134_bold#def %#Pl_235_2500134_240_5789784_NONE# %#Pl_250_12369084_240_5789784_NONE#./%#Pl_231_16777215_240_5789784_bold#ghi %#Pl_240_5789784_236_3158064_NONE# %#Pl_231_16777215_236_3158064_NONE# %#Pl_252_13684944_236_3158064_NONE# %#Pl_235_2500134_252_13684944_bold# Bufs '
|
||||
if result isnot# '%#Pl_247_10395294_236_3158064_NONE# 1 %#Pl_247_10395294_236_3158064_NONE#./%#Pl_247_10395294_236_3158064_NONE#abc %#Pl_247_10395294_236_3158064_NONE# %#Pl_247_10395294_236_3158064_NONE#2 %#Pl_247_10395294_236_3158064_NONE#./%#Pl_247_10395294_236_3158064_NONE#def %#Pl_236_3158064_240_5789784_NONE# %#Pl_250_12369084_240_5789784_NONE#./%#Pl_231_16777215_240_5789784_bold#ghi %#Pl_240_5789784_236_3158064_NONE# %#Pl_231_16777215_236_3158064_NONE# %#Pl_252_13684944_236_3158064_NONE# %#Pl_235_2500134_252_13684944_bold# Bufs '
|
||||
call writefile(['Unexpected tabline (2)', result], 'message.fail')
|
||||
cquit
|
||||
endif
|
||||
@ -42,7 +42,7 @@ catch
|
||||
call writefile(['Exception while evaluating &tabline (3)', v:exception], 'message.fail')
|
||||
endtry
|
||||
|
||||
if result isnot# '%#Pl_240_5789784_235_2500134_NONE# 1 %#Pl_240_5789784_235_2500134_NONE#./%#Pl_244_8421504_235_2500134_bold#abc %#Pl_244_8421504_235_2500134_NONE# %#Pl_240_5789784_235_2500134_NONE#2 %#Pl_240_5789784_235_2500134_NONE#./%#Pl_244_8421504_235_2500134_bold#def %#Pl_235_2500134_240_5789784_NONE# %#Pl_250_12369084_240_5789784_NONE#./%#Pl_231_16777215_240_5789784_bold#ghi %#Pl_240_5789784_236_3158064_NONE# %#Pl_231_16777215_236_3158064_NONE# %#Pl_252_13684944_236_3158064_NONE# %#Pl_235_2500134_252_13684944_bold# Bufs '
|
||||
if result isnot# '%#Pl_247_10395294_236_3158064_NONE# 1 %#Pl_247_10395294_236_3158064_NONE#./%#Pl_247_10395294_236_3158064_NONE#abc %#Pl_247_10395294_236_3158064_NONE# %#Pl_247_10395294_236_3158064_NONE#2 %#Pl_247_10395294_236_3158064_NONE#./%#Pl_247_10395294_236_3158064_NONE#def %#Pl_236_3158064_240_5789784_NONE# %#Pl_250_12369084_240_5789784_NONE#./%#Pl_231_16777215_240_5789784_bold#ghi %#Pl_240_5789784_236_3158064_NONE# %#Pl_231_16777215_236_3158064_NONE# %#Pl_252_13684944_236_3158064_NONE# %#Pl_235_2500134_252_13684944_bold# Bufs '
|
||||
call writefile(['Unexpected tabline (3)', result], 'message.fail')
|
||||
cquit
|
||||
endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user