diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ae4330bf5..8006f2290 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -31,6 +31,10 @@ version 0.6.0 [future] - Add a command line switch to set the window title. +- Add more options to customize the tab-bar's appearance (font styles and + separator) + + version 0.5.1 [2017-12-01] --------------------------- diff --git a/kitty/config.py b/kitty/config.py index f12f968c8..80157bbdb 100644 --- a/kitty/config.py +++ b/kitty/config.py @@ -231,6 +231,20 @@ def box_drawing_scale(x): return ans +def tab_separator(x): + for q in '\'"': + if x.startswith(q) and x.endswith(q): + x = x[1:-1] + break + if not x.strip(): + x = defaults.tab_separator + return x + + +def tab_font_style(x): + return {'bold-italic': (True, True), 'bold': (True, False), 'italic': (False, True)}.get(x.lower().replace('_', '-'), (False, False)) + + type_map = { 'adjust_line_height': adjust_line_height, 'scrollback_lines': positive_int, @@ -263,6 +277,9 @@ type_map = { 'box_drawing_scale': box_drawing_scale, 'x11_bell_volume': int, 'background_opacity': unit_float, + 'tab_separator': tab_separator, + 'active_tab_font_style': tab_font_style, + 'inactive_tab_font_style': tab_font_style, } for name in ( diff --git a/kitty/kitty.conf b/kitty/kitty.conf index 2b61e517f..267f09291 100644 --- a/kitty/kitty.conf +++ b/kitty/kitty.conf @@ -175,11 +175,14 @@ active_border_color #00ff00 # The color for the border of inactive windows inactive_border_color #cccccc -# Tab-bar colors +# Tab-bar customization active_tab_foreground #000 active_tab_background #eee +active_tab_font_style bold-italic inactive_tab_foreground #444 inactive_tab_background #999 +inactive_tab_font_style normal +tab_separator " ┇" # The 16 terminal colors. There are 8 basic colors, each color has a dull and diff --git a/kitty/tabs.py b/kitty/tabs.py index 49efd56b0..b977a3348 100644 --- a/kitty/tabs.py +++ b/kitty/tabs.py @@ -228,6 +228,17 @@ class TabBar: # {{{ color_as_int(opts.inactive_tab_background) ) self.blank_rects = () + sep = opts.tab_separator + self.trailing_spaces = self.leading_spaces = 0 + while sep and sep[0] == ' ': + sep = sep[1:] + self.trailing_spaces += 1 + while sep and sep[-1] == ' ': + self.leading_spaces += 1 + sep = sep[:-1] + self.sep = sep + self.active_font_style = opts.active_tab_font_style + self.inactive_font_style = opts.inactive_tab_font_style def as_rgb(x): return (x << 8) | 2 @@ -264,9 +275,9 @@ class TabBar: # {{{ for t in data: s.cursor.bg = self.active_bg if t.is_active else 0 s.cursor.fg = self.active_fg if t.is_active else 0 - s.cursor.bold = s.cursor.italic = t.is_active + s.cursor.bold, s.cursor.italic = self.active_font_style if t.is_active else self.inactive_font_style before = s.cursor.x - s.draw(t.title) + s.draw(' ' * self.leading_spaces + t.title + ' ' * self.trailing_spaces) extra = s.cursor.x - before - max_title_length if extra > 0: s.cursor.x -= extra + 1 @@ -274,7 +285,7 @@ class TabBar: # {{{ cr.append((before, s.cursor.x)) s.cursor.bold = s.cursor.italic = False s.cursor.fg = s.cursor.bg = 0 - s.draw('┇') + s.draw(self.sep) if s.cursor.x > s.columns - max_title_length and not t.is_last: s.draw('…') break @@ -405,7 +416,7 @@ class TabManager: # {{{ at = self.active_tab ans = [] for t in self.tabs: - title = (t.name or t.title or appname) + ' ' + title = (t.name or t.title or appname).strip() ans.append(TabbarData(title, t is at, t is self.tabs[-1])) return ans