mirror of
https://github.com/powerline/powerline.git
synced 2025-07-31 01:35:40 +02:00
Add tabpage and tabnr arguments to segment_info
This commit is contained in:
parent
1907708e98
commit
f02399b617
@ -84,10 +84,10 @@ else:
|
|||||||
|
|
||||||
def bufvar_exists(buffer, varname): # NOQA
|
def bufvar_exists(buffer, varname): # NOQA
|
||||||
if not buffer or buffer.number == vim.current.buffer.number:
|
if not buffer or buffer.number == vim.current.buffer.number:
|
||||||
return vim.eval('exists("b:{0}")'.format(varname))
|
return int(vim.eval('exists("b:{0}")'.format(varname)))
|
||||||
else:
|
else:
|
||||||
return vim.eval('has_key(getbufvar({0}, ""), {1})'
|
return int(vim.eval('has_key(getbufvar({0}, ""), {1})'
|
||||||
.format(buffer.number, varname))
|
.format(buffer.number, varname)))
|
||||||
|
|
||||||
def vim_getwinvar(segment_info, varname): # NOQA
|
def vim_getwinvar(segment_info, varname): # NOQA
|
||||||
result = vim.eval('getwinvar({0}, "{1}")'.format(segment_info['winnr'], varname))
|
result = vim.eval('getwinvar({0}, "{1}")'.format(segment_info['winnr'], varname))
|
||||||
@ -104,6 +104,79 @@ else:
|
|||||||
return getbufvar(info['bufnr'], '&' + option)
|
return getbufvar(info['bufnr'], '&' + option)
|
||||||
|
|
||||||
|
|
||||||
|
if hasattr(vim, 'tabpages'):
|
||||||
|
current_tabpage = lambda: vim.current.tabpage
|
||||||
|
list_tabpages = lambda: vim.tabpages
|
||||||
|
else:
|
||||||
|
class FalseObject(object):
|
||||||
|
@staticmethod
|
||||||
|
def __nonzero__():
|
||||||
|
return False
|
||||||
|
|
||||||
|
__bool__ = __nonzero__
|
||||||
|
|
||||||
|
def get_buffer(number):
|
||||||
|
for buffer in vim.buffers:
|
||||||
|
if buffer.number == number:
|
||||||
|
return buffer
|
||||||
|
raise KeyError(number)
|
||||||
|
|
||||||
|
class WindowVars(object):
|
||||||
|
__slots__ = ('tabnr', 'winnr')
|
||||||
|
|
||||||
|
def __init__(self, window):
|
||||||
|
self.tabnr = window.tabnr
|
||||||
|
self.winnr = window.number
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
has_key = vim.eval('has_key(gettabwinvar({0}, {1}, ""), "{2}")'.format(self.tabnr, self.winnr, key))
|
||||||
|
if has_key == '0':
|
||||||
|
raise KeyError
|
||||||
|
return vim.eval('gettabwinvar({0}, {1}, "{2}")'.format(self.tabnr, self.winnr, key))
|
||||||
|
|
||||||
|
def get(self, key, default=None):
|
||||||
|
try:
|
||||||
|
return self[key]
|
||||||
|
except KeyError:
|
||||||
|
return default
|
||||||
|
|
||||||
|
class Window(FalseObject):
|
||||||
|
__slots__ = ('tabnr', 'number', '_vars')
|
||||||
|
|
||||||
|
def __init__(self, tabnr, number):
|
||||||
|
self.tabnr = tabnr
|
||||||
|
self.number = number
|
||||||
|
self.vars = WindowVars(self)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def buffer(self):
|
||||||
|
return get_buffer(int(vim.eval('tabpagebuflist({0})[{1}]'.format(self.tabnr, self.number - 1))))
|
||||||
|
|
||||||
|
class Tabpage(FalseObject):
|
||||||
|
__slots__ = ('number',)
|
||||||
|
|
||||||
|
def __init__(self, number):
|
||||||
|
self.number = number
|
||||||
|
|
||||||
|
def __eq__(self, tabpage):
|
||||||
|
if not isinstance(tabpage, Tabpage):
|
||||||
|
raise NotImplementedError
|
||||||
|
return self.number == tabpage.number
|
||||||
|
|
||||||
|
@property
|
||||||
|
def window(self):
|
||||||
|
return Window(self.number, int(vim.eval('tabpagewinnr({0})'.format(self.number))))
|
||||||
|
|
||||||
|
def _last_tab_nr():
|
||||||
|
return int(vim.eval('tabpagenr("$")'))
|
||||||
|
|
||||||
|
def current_tabpage(): # NOQA
|
||||||
|
return Tabpage(int(vim.eval('tabpagenr()')))
|
||||||
|
|
||||||
|
def list_tabpages(): # NOQA
|
||||||
|
return [Tabpage(nr) for nr in range(1, _last_tab_nr() + 1)]
|
||||||
|
|
||||||
|
|
||||||
if sys.version_info < (3,) or not hasattr(vim, 'bindeval'):
|
if sys.version_info < (3,) or not hasattr(vim, 'bindeval'):
|
||||||
getbufvar = vim_get_func('getbufvar')
|
getbufvar = vim_get_func('getbufvar')
|
||||||
else:
|
else:
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from powerline.bindings.vim import vim_get_func, environ
|
from powerline.bindings.vim import vim_get_func, environ, current_tabpage
|
||||||
from powerline.renderer import Renderer
|
from powerline.renderer import Renderer
|
||||||
from powerline.colorscheme import ATTR_BOLD, ATTR_ITALIC, ATTR_UNDERLINE
|
from powerline.colorscheme import ATTR_BOLD, ATTR_ITALIC, ATTR_UNDERLINE
|
||||||
from powerline.theme import Theme
|
from powerline.theme import Theme
|
||||||
@ -99,7 +99,9 @@ class VimRenderer(Renderer):
|
|||||||
window_id=window_id,
|
window_id=window_id,
|
||||||
winnr=winnr,
|
winnr=winnr,
|
||||||
buffer=window.buffer,
|
buffer=window.buffer,
|
||||||
|
tabpage=current_tabpage(),
|
||||||
)
|
)
|
||||||
|
segment_info['tabnr'] = segment_info['tabpage'].number
|
||||||
segment_info['bufnr'] = segment_info['buffer'].number
|
segment_info['bufnr'] = segment_info['buffer'].number
|
||||||
winwidth = segment_info['window'].width
|
winwidth = segment_info['window'].width
|
||||||
matcher_info = segment_info
|
matcher_info = segment_info
|
||||||
|
@ -180,6 +180,7 @@ def gen_segment_getter(pl, ext, common_config, theme_configs, default_module=Non
|
|||||||
'priority': None,
|
'priority': None,
|
||||||
'draw_soft_divider': None,
|
'draw_soft_divider': None,
|
||||||
'draw_hard_divider': None,
|
'draw_hard_divider': None,
|
||||||
|
'draw_inner_divider': None,
|
||||||
'side': side,
|
'side': side,
|
||||||
'exclude_modes': segment.get('exclude_modes', []),
|
'exclude_modes': segment.get('exclude_modes', []),
|
||||||
'include_modes': segment.get('include_modes', []),
|
'include_modes': segment.get('include_modes', []),
|
||||||
@ -190,7 +191,8 @@ def gen_segment_getter(pl, ext, common_config, theme_configs, default_module=Non
|
|||||||
'mode': None,
|
'mode': None,
|
||||||
'_rendered_raw': '',
|
'_rendered_raw': '',
|
||||||
'_rendered_hl': '',
|
'_rendered_hl': '',
|
||||||
'_len': 0,
|
'_len': None,
|
||||||
|
'_contents_len': None,
|
||||||
'_space_left': 0,
|
'_space_left': 0,
|
||||||
'_space_right': 0,
|
'_space_right': 0,
|
||||||
}
|
}
|
||||||
@ -235,7 +237,8 @@ def gen_segment_getter(pl, ext, common_config, theme_configs, default_module=Non
|
|||||||
'mode': None,
|
'mode': None,
|
||||||
'_rendered_raw': '',
|
'_rendered_raw': '',
|
||||||
'_rendered_hl': '',
|
'_rendered_hl': '',
|
||||||
'_len': 0,
|
'_len': None,
|
||||||
|
'_contents_len': None,
|
||||||
'_space_left': 0,
|
'_space_left': 0,
|
||||||
'_space_right': 0,
|
'_space_right': 0,
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,8 @@ except ImportError:
|
|||||||
|
|
||||||
from powerline.bindings.vim import (vim_get_func, getbufvar, vim_getbufoption,
|
from powerline.bindings.vim import (vim_get_func, getbufvar, vim_getbufoption,
|
||||||
buffer_name, vim_getwinvar,
|
buffer_name, vim_getwinvar,
|
||||||
register_buffer_cache)
|
register_buffer_cache, current_tabpage,
|
||||||
|
list_tabpages)
|
||||||
from powerline.theme import requires_segment_info, requires_filesystem_watcher
|
from powerline.theme import requires_segment_info, requires_filesystem_watcher
|
||||||
from powerline.lib import add_divider_highlight_group
|
from powerline.lib import add_divider_highlight_group
|
||||||
from powerline.lib.vcs import guess, tree_status
|
from powerline.lib.vcs import guess, tree_status
|
||||||
@ -487,50 +488,20 @@ def trailing_whitespace(pl, segment_info):
|
|||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
if hasattr(vim, 'vvars') and vim.vvars['version'] >= 704:
|
def tabpage_updated_segment_info(segment_info, tabpage):
|
||||||
def updated_segment_info(segment_info, tabpage):
|
segment_info = segment_info.copy()
|
||||||
segment_info = segment_info.copy()
|
window = tabpage.window
|
||||||
window = tabpage.window
|
buffer = window.buffer
|
||||||
buffer = window.buffer
|
segment_info.update(
|
||||||
segment_info.update(
|
tabpage=tabpage,
|
||||||
tabpage=tabpage,
|
tabnr=tabpage.number,
|
||||||
tabnr=tabpage.number,
|
window=window,
|
||||||
window=window,
|
winnr=window.number,
|
||||||
winnr=window.number,
|
window_id=int(window.vars.get('powerline_window_id', -1)),
|
||||||
window_id=window.vars.get('powerline_window_id'),
|
buffer=buffer,
|
||||||
buffer=buffer,
|
bufnr=buffer.number,
|
||||||
bufnr=buffer.number,
|
)
|
||||||
)
|
return segment_info
|
||||||
return segment_info
|
|
||||||
|
|
||||||
list_tabpages = lambda: vim.tabpages
|
|
||||||
current_tabpage = lambda: vim.current.tabpage
|
|
||||||
tabpage_nr = lambda tabpage: tabpage.number
|
|
||||||
else:
|
|
||||||
def updated_segment_info(segment_info, tabnr): # NOQA
|
|
||||||
segment_info = segment_info.copy()
|
|
||||||
winnr = int(vim.eval('tabpagewinnr({0})'.format(tabnr)))
|
|
||||||
bufnr = int(vim.eval('tabpagebuflist({0})[{1}]'.format(tabnr, winnr - 1)))
|
|
||||||
buffer = None
|
|
||||||
for buffer in vim.buffers:
|
|
||||||
if buffer.number == bufnr:
|
|
||||||
break
|
|
||||||
window_id = vim.eval('gettabwinvar({0}, {1}, "powerline_window_id")'.format(tabnr, winnr))
|
|
||||||
window_id = int(window_id) if window_id else None
|
|
||||||
segment_info.update(
|
|
||||||
tabpage=None,
|
|
||||||
tabnr=tabnr,
|
|
||||||
window=None,
|
|
||||||
winnr=winnr,
|
|
||||||
window_id=window_id,
|
|
||||||
buffer=buffer,
|
|
||||||
bufnr=bufnr,
|
|
||||||
)
|
|
||||||
return segment_info
|
|
||||||
|
|
||||||
list_tabpages = lambda: range(1, int(vim.eval('tabpagenr("$")')) + 1) # NOQA
|
|
||||||
current_tabpage = lambda: int(vim.eval('tabpagenr()')) # NOQA
|
|
||||||
tabpage_nr = lambda tabnr: tabnr # NOQA
|
|
||||||
|
|
||||||
|
|
||||||
@requires_segment_info
|
@requires_segment_info
|
||||||
@ -548,15 +519,15 @@ def tablister(pl, segment_info):
|
|||||||
thus window objects are not available as well.
|
thus window objects are not available as well.
|
||||||
'''
|
'''
|
||||||
cur_tabpage = current_tabpage()
|
cur_tabpage = current_tabpage()
|
||||||
cur_tabnr = tabpage_nr(cur_tabpage)
|
cur_tabnr = cur_tabpage.number
|
||||||
|
|
||||||
def add_multiplier(tabpage, dct):
|
def add_multiplier(tabpage, dct):
|
||||||
dct['priority_multiplier'] = 1 + (0.001 * abs(tabpage_nr(tabpage) - cur_tabnr))
|
dct['priority_multiplier'] = 1 + (0.001 * abs(tabpage.number - cur_tabnr))
|
||||||
return dct
|
return dct
|
||||||
|
|
||||||
return [
|
return [
|
||||||
(
|
(
|
||||||
updated_segment_info(segment_info, tabpage),
|
tabpage_updated_segment_info(segment_info, tabpage),
|
||||||
add_multiplier(tabpage, {'mode': ('tab' if tabpage == cur_tabpage else 'nc')})
|
add_multiplier(tabpage, {'mode': ('tab' if tabpage == cur_tabpage else 'nc')})
|
||||||
)
|
)
|
||||||
for tabpage in list_tabpages()
|
for tabpage in list_tabpages()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user