old_contents: # vim:fileencoding=utf-8:noet
  from __future__ import (unicode_literals, division, absolute_import, print_function)
  
  from powerline.segments.vim import window_cached
  from powerline.bindings.vim import vim_command_exists, vim_get_autoload_func
  
  
  currenttag = None
  
  
  @window_cached
  def current_tag(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
  	if not currenttag:
  		if vim_command_exists('Tagbar'):
  			currenttag = vim_get_autoload_func('tagbar#currenttag')
  			if not currenttag:
  				return None
  		else:
  			return None
  	return currenttag('%s', '', flags)
  
new_contents: # 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
  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
  
subject: Implement caching for tagbar segment