From 585dcc7d19a6f39004e153a7c8c15f3eebac77fa Mon Sep 17 00:00:00 2001 From: Ben Hammond <42008155+flber@users.noreply.github.com> Date: Sun, 17 Jul 2022 12:18:11 -0700 Subject: [PATCH] Adds options for tab bar and tab color reversing (#2480) * Adds options for tab bar and tab color reversing * Fixes small bug with tabreverse, options now work fully as expected --- internal/config/settings.go | 6 +++-- internal/display/tabwindow.go | 49 +++++++++++++++++++++++------------ runtime/help/options.md | 10 +++++++ 3 files changed, 47 insertions(+), 18 deletions(-) diff --git a/internal/config/settings.go b/internal/config/settings.go index ce1f1d4b..2c23f39b 100644 --- a/internal/config/settings.go +++ b/internal/config/settings.go @@ -335,10 +335,12 @@ var DefaultGlobalOnlySettings = map[string]interface{}{ "mouse": true, "parsecursor": false, "paste": false, - "savehistory": true, - "sucmd": "sudo", "pluginchannels": []string{"https://raw.githubusercontent.com/micro-editor/plugin-channel/master/channel.json"}, "pluginrepos": []string{}, + "savehistory": true, + "sucmd": "sudo", + "tabhighlight": false, + "tabreverse": true, "xterm": false, } diff --git a/internal/display/tabwindow.go b/internal/display/tabwindow.go index 70694504..8e31922c 100644 --- a/internal/display/tabwindow.go +++ b/internal/display/tabwindow.go @@ -2,6 +2,7 @@ package display import ( runewidth "github.com/mattn/go-runewidth" + "github.com/zyedidia/tcell/v2" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/screen" @@ -94,16 +95,27 @@ func (w *TabWindow) Display() { x := -w.hscroll done := false - tabBarStyle := config.DefStyle.Reverse(true) - if style, ok := config.Colorscheme["tabbar"]; ok { - tabBarStyle = style - } - tabBarActiveStyle := tabBarStyle - if style, ok := config.Colorscheme["tabbar.active"]; ok { - tabBarActiveStyle = style - } + globalTabReverse := config.GetGlobalOption("tabreverse").(bool) + globalTabHighlight := config.GetGlobalOption("tabhighlight").(bool) + + // xor of reverse and tab highlight to get tab character (as in filename and surrounding characters) reverse state + tabCharHighlight := (globalTabReverse || globalTabHighlight) && !(globalTabReverse && globalTabHighlight) - draw := func(r rune, n int, active bool) { + reverseStyles := func(reverse bool) (tcell.Style, tcell.Style) { + tabBarStyle := config.DefStyle.Reverse(reverse) + if style, ok := config.Colorscheme["tabbar"]; ok { + tabBarStyle = style + } + tabBarActiveStyle := tabBarStyle + if style, ok := config.Colorscheme["tabbar.active"]; ok { + tabBarActiveStyle = style + } + return tabBarStyle, tabBarActiveStyle + } + + draw := func(r rune, n int, active bool, reversed bool) { + tabBarStyle, tabBarActiveStyle := reverseStyles(reversed) + style := tabBarStyle if active { style = tabBarActiveStyle @@ -131,28 +143,33 @@ func (w *TabWindow) Display() { for i, n := range w.Names { if i == w.active { - draw('[', 1, true) + draw('[', 1, true, tabCharHighlight) } else { - draw(' ', 1, false) + draw(' ', 1, false, tabCharHighlight) } + for _, c := range n { - draw(c, 1, i == w.active) + draw(c, 1, i == w.active, tabCharHighlight) } + if i == len(w.Names)-1 { done = true } + if i == w.active { - draw(']', 1, true) - draw(' ', 2, true) + draw(']', 1, true, tabCharHighlight) + draw(' ', 2, true, globalTabReverse) } else { - draw(' ', 3, false) + draw(' ', 1, false, tabCharHighlight) + draw(' ', 2, false, globalTabReverse) } + if x >= w.Width { break } } if x < w.Width { - draw(' ', w.Width-x, false) + draw(' ', w.Width-x, false, globalTabReverse) } } diff --git a/runtime/help/options.md b/runtime/help/options.md index 89d85396..8c28c185 100644 --- a/runtime/help/options.md +++ b/runtime/help/options.md @@ -365,6 +365,14 @@ Here are the available options: default value: `false` +* `tabhighlight`: inverts the tab characters' (filename, save indicator, etc) colors with respect to the tab bar. + + default value: false + +* `tabreverse`: reverses the tab bar colors when active. + + default value: true + * `tabsize`: the size in spaces that a tab character should be displayed with. default value: `4` @@ -491,6 +499,8 @@ so that you can see what the formatting should look like. "sucmd": "sudo", "syntax": true, "tabmovement": false, + "tabhighlight": true, + "tabreverse": false, "tabsize": 4, "tabstospaces": false, "useprimary": true, -- 2.44.0