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
|
||||
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:
|
||||
return vim.eval('has_key(getbufvar({0}, ""), {1})'
|
||||
.format(buffer.number, varname))
|
||||
return int(vim.eval('has_key(getbufvar({0}, ""), {1})'
|
||||
.format(buffer.number, varname)))
|
||||
|
||||
def vim_getwinvar(segment_info, varname): # NOQA
|
||||
result = vim.eval('getwinvar({0}, "{1}")'.format(segment_info['winnr'], varname))
|
||||
|
@ -104,6 +104,79 @@ else:
|
|||
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'):
|
||||
getbufvar = vim_get_func('getbufvar')
|
||||
else:
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
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.colorscheme import ATTR_BOLD, ATTR_ITALIC, ATTR_UNDERLINE
|
||||
from powerline.theme import Theme
|
||||
|
@ -99,7 +99,9 @@ class VimRenderer(Renderer):
|
|||
window_id=window_id,
|
||||
winnr=winnr,
|
||||
buffer=window.buffer,
|
||||
tabpage=current_tabpage(),
|
||||
)
|
||||
segment_info['tabnr'] = segment_info['tabpage'].number
|
||||
segment_info['bufnr'] = segment_info['buffer'].number
|
||||
winwidth = segment_info['window'].width
|
||||
matcher_info = segment_info
|
||||
|
|
|
@ -180,6 +180,7 @@ def gen_segment_getter(pl, ext, common_config, theme_configs, default_module=Non
|
|||
'priority': None,
|
||||
'draw_soft_divider': None,
|
||||
'draw_hard_divider': None,
|
||||
'draw_inner_divider': None,
|
||||
'side': side,
|
||||
'exclude_modes': segment.get('exclude_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,
|
||||
'_rendered_raw': '',
|
||||
'_rendered_hl': '',
|
||||
'_len': 0,
|
||||
'_len': None,
|
||||
'_contents_len': None,
|
||||
'_space_left': 0,
|
||||
'_space_right': 0,
|
||||
}
|
||||
|
@ -235,7 +237,8 @@ def gen_segment_getter(pl, ext, common_config, theme_configs, default_module=Non
|
|||
'mode': None,
|
||||
'_rendered_raw': '',
|
||||
'_rendered_hl': '',
|
||||
'_len': 0,
|
||||
'_len': None,
|
||||
'_contents_len': None,
|
||||
'_space_left': 0,
|
||||
'_space_right': 0,
|
||||
}
|
||||
|
|
|
@ -15,7 +15,8 @@ except ImportError:
|
|||
|
||||
from powerline.bindings.vim import (vim_get_func, getbufvar, vim_getbufoption,
|
||||
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.lib import add_divider_highlight_group
|
||||
from powerline.lib.vcs import guess, tree_status
|
||||
|
@ -487,50 +488,20 @@ def trailing_whitespace(pl, segment_info):
|
|||
return ret
|
||||
|
||||
|
||||
if hasattr(vim, 'vvars') and vim.vvars['version'] >= 704:
|
||||
def updated_segment_info(segment_info, tabpage):
|
||||
segment_info = segment_info.copy()
|
||||
window = tabpage.window
|
||||
buffer = window.buffer
|
||||
segment_info.update(
|
||||
tabpage=tabpage,
|
||||
tabnr=tabpage.number,
|
||||
window=window,
|
||||
winnr=window.number,
|
||||
window_id=window.vars.get('powerline_window_id'),
|
||||
buffer=buffer,
|
||||
bufnr=buffer.number,
|
||||
)
|
||||
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
|
||||
def tabpage_updated_segment_info(segment_info, tabpage):
|
||||
segment_info = segment_info.copy()
|
||||
window = tabpage.window
|
||||
buffer = window.buffer
|
||||
segment_info.update(
|
||||
tabpage=tabpage,
|
||||
tabnr=tabpage.number,
|
||||
window=window,
|
||||
winnr=window.number,
|
||||
window_id=int(window.vars.get('powerline_window_id', -1)),
|
||||
buffer=buffer,
|
||||
bufnr=buffer.number,
|
||||
)
|
||||
return segment_info
|
||||
|
||||
|
||||
@requires_segment_info
|
||||
|
@ -548,15 +519,15 @@ def tablister(pl, segment_info):
|
|||
thus window objects are not available as well.
|
||||
'''
|
||||
cur_tabpage = current_tabpage()
|
||||
cur_tabnr = tabpage_nr(cur_tabpage)
|
||||
cur_tabnr = cur_tabpage.number
|
||||
|
||||
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 [
|
||||
(
|
||||
updated_segment_info(segment_info, tabpage),
|
||||
tabpage_updated_segment_info(segment_info, tabpage),
|
||||
add_multiplier(tabpage, {'mode': ('tab' if tabpage == cur_tabpage else 'nc')})
|
||||
)
|
||||
for tabpage in list_tabpages()
|
||||
|
|
Loading…
Reference in New Issue