Source code for powerline.segments.vim.plugin.tagbar

# vim:fileencoding=utf-8:noet
from __future__ import (unicode_literals, division, absolute_import, print_function)

try:
	import vim
except ImportError:
	vim = object()

from powerline.bindings.vim import vim_command_exists, vim_get_autoload_func
from powerline.theme import requires_segment_info


currenttag = None
tag_cache = {}


@requires_segment_info
[docs]def current_tag(segment_info, pl, flags='s'): '''Return tag that is near the cursor. :param str flags: Specifies additional properties of the displayed tag. Supported values: * s - display complete signature * f - display the full hierarchy of the tag * p - display the raw prototype More info in the `official documentation`_ (search for “tagbar#currenttag”). .. _`official documentation`: https://github.com/majutsushi/tagbar/blob/master/doc/tagbar.txt ''' global currenttag global tag_cache window_id = segment_info['window_id'] if segment_info['mode'] == 'nc': return tag_cache.get(window_id, (None,))[-1] if not currenttag: if vim_command_exists('Tagbar'): currenttag = vim_get_autoload_func('tagbar#currenttag') if not currenttag: return None else: return None prev_key, r = tag_cache.get(window_id, (None, None)) key = (int(vim.eval('b:changedtick')), segment_info['window'].cursor[0]) if prev_key and key == prev_key: return r r = currenttag('%s', '', flags) tag_cache[window_id] = (key, r) return r