0
0
.dotfiles/powerline-bin/powerline/renderers/tmux.py

80 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 dont 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