Make tab_modified_indicator work in old Vims

Closes #996
This commit is contained in:
ZyX 2014-08-22 08:59:25 +04:00
parent 9cab9d6fff
commit 5c4d75f952
2 changed files with 29 additions and 7 deletions

View File

@ -136,6 +136,12 @@ else:
if hasattr(vim, 'tabpages'):
current_tabpage = lambda: vim.current.tabpage
list_tabpages = lambda: vim.tabpages
def list_tabpage_buffers_segment_info(segment_info):
return (
{'buffer': window.buffer, 'bufnr': window.buffer.number}
for window in segment_info['tabpage'].windows
)
else:
class FalseObject(object):
@staticmethod
@ -205,6 +211,24 @@ else:
def list_tabpages(): # NOQA
return [Tabpage(nr) for nr in range(1, _last_tab_nr() + 1)]
class TabBufSegmentInfo(dict):
def __getitem__(self, key):
try:
return super(TabBufSegmentInfo, self).__getitem__(key)
except KeyError:
if key != 'buffer':
raise
else:
buffer = get_buffer(super(TabBufSegmentInfo, self).__getitem__('bufnr'))
self['buffer'] = buffer
return buffer
def list_tabpage_buffers_segment_info(segment_info):
return (
TabBufSegmentInfo(bufnr=int(bufnrstr))
for bufnrstr in vim.eval('tabpagebuflist({0})'.format(segment_info['tabnr']))
)
class VimEnviron(object):
@staticmethod

View File

@ -15,7 +15,8 @@ from collections import defaultdict
from powerline.bindings.vim import (vim_get_func, getbufvar, vim_getbufoption,
buffer_name, vim_getwinvar,
register_buffer_cache, current_tabpage,
list_tabpages)
list_tabpages,
list_tabpage_buffers_segment_info)
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
@ -176,13 +177,10 @@ def tab_modified_indicator(pl, segment_info, text='+'):
Highlight groups used: ``tab_modified_indicator`` or ``modified_indicator``.
'''
if 'tabpage' in segment_info:
buffers = [dict(buffer=w.buffer) for w in segment_info['tabpage'].windows]
modified = [int(vim_getbufoption(buf, 'modified')) != 0 for buf in buffers]
ret = text if reduce(lambda x, y: x or y, modified) else None
if ret:
for buf_segment_info in list_tabpage_buffers_segment_info(segment_info):
if int(vim_getbufoption(buf_segment_info, 'modified')):
return [{
'contents': ret,
'contents': text,
'highlight_group': ['tab_modified_indicator', 'modified_indicator'],
}]
return None