80 lines
2.1 KiB
Python
80 lines
2.1 KiB
Python
|
# vim:fileencoding=utf-8:noet
|
|||
|
from __future__ import (unicode_literals, division, absolute_import, print_function)
|
|||
|
|
|||
|
from powerline.renderer import Renderer
|
|||
|
from powerline.colorscheme import ATTR_BOLD, ATTR_ITALIC, ATTR_UNDERLINE
|
|||
|
|
|||
|
|
|||
|
def attrs_to_tmux_attrs(attrs):
|
|||
|
if attrs is False:
|
|||
|
return ['nobold', 'noitalics', 'nounderscore']
|
|||
|
else:
|
|||
|
ret = []
|
|||
|
if attrs & ATTR_BOLD:
|
|||
|
ret += ['bold']
|
|||
|
else:
|
|||
|
ret += ['nobold']
|
|||
|
if attrs & ATTR_ITALIC:
|
|||
|
ret += ['italics']
|
|||
|
else:
|
|||
|
ret += ['noitalics']
|
|||
|
if attrs & ATTR_UNDERLINE:
|
|||
|
ret += ['underscore']
|
|||
|
else:
|
|||
|
ret += ['nounderscore']
|
|||
|
return ret
|
|||
|
|
|||
|
|
|||
|
class TmuxRenderer(Renderer):
|
|||
|
'''Powerline tmux segment renderer.'''
|
|||
|
|
|||
|
character_translations = Renderer.character_translations.copy()
|
|||
|
character_translations[ord('#')] = '##[]'
|
|||
|
|
|||
|
def render(self, width=None, segment_info={}, **kwargs):
|
|||
|
if width and segment_info:
|
|||
|
width -= segment_info.get('width_adjust', 0)
|
|||
|
if width < 10:
|
|||
|
width = 10
|
|||
|
return super(TmuxRenderer, self).render(width=width, segment_info=segment_info, **kwargs)
|
|||
|
|
|||
|
def hlstyle(self, fg=None, bg=None, attrs=None):
|
|||
|
'''Highlight a segment.'''
|
|||
|
# We don’t need to explicitly reset attributes, so skip those calls
|
|||
|
if not attrs and not bg and not fg:
|
|||
|
return ''
|
|||
|
tmux_attrs = []
|
|||
|
if fg is not None:
|
|||
|
if fg is False or fg[0] is False:
|
|||
|
tmux_attrs += ['fg=default']
|
|||
|
else:
|
|||
|
if self.term_truecolor and fg[1]:
|
|||
|
tmux_attrs += ['fg=#{0:06x}'.format(int(fg[1]))]
|
|||
|
else:
|
|||
|
tmux_attrs += ['fg=colour' + str(fg[0])]
|
|||
|
if bg is not None:
|
|||
|
if bg is False or bg[0] is False:
|
|||
|
tmux_attrs += ['bg=default']
|
|||
|
else:
|
|||
|
if self.term_truecolor and bg[1]:
|
|||
|
tmux_attrs += ['bg=#{0:06x}'.format(int(bg[1]))]
|
|||
|
else:
|
|||
|
tmux_attrs += ['bg=colour' + str(bg[0])]
|
|||
|
if attrs is not None:
|
|||
|
tmux_attrs += attrs_to_tmux_attrs(attrs)
|
|||
|
return '#[' + ','.join(tmux_attrs) + ']'
|
|||
|
|
|||
|
def get_segment_info(self, segment_info, mode):
|
|||
|
r = self.segment_info.copy()
|
|||
|
if segment_info:
|
|||
|
r.update(segment_info)
|
|||
|
if 'pane_id' in r:
|
|||
|
varname = 'TMUX_PWD_' + str(r['pane_id'])
|
|||
|
if varname in r['environ']:
|
|||
|
r['getcwd'] = lambda: r['environ'][varname]
|
|||
|
r['mode'] = mode
|
|||
|
return r
|
|||
|
|
|||
|
|
|||
|
renderer = TmuxRenderer
|