summaryrefslogtreecommitdiffstats
path: root/powerline/renderers/tmux.py
diff options
context:
space:
mode:
Diffstat (limited to 'powerline/renderers/tmux.py')
-rw-r--r--powerline/renderers/tmux.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/powerline/renderers/tmux.py b/powerline/renderers/tmux.py
new file mode 100644
index 0000000..fc3282a
--- /dev/null
+++ b/powerline/renderers/tmux.py
@@ -0,0 +1,81 @@
+# 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, **kwargs):
+ '''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_current_path' in r:
+ r['getcwd'] = lambda: r['pane_current_path']
+ elif '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