]> git.lizzy.rs Git - micro.git/commitdiff
Adds options for tab bar and tab color reversing (#2480)
authorBen Hammond <42008155+flber@users.noreply.github.com>
Sun, 17 Jul 2022 19:18:11 +0000 (12:18 -0700)
committerGitHub <noreply@github.com>
Sun, 17 Jul 2022 19:18:11 +0000 (12:18 -0700)
* Adds options for tab bar and tab color reversing

* Fixes small bug with tabreverse, options now work fully as expected

internal/config/settings.go
internal/display/tabwindow.go
runtime/help/options.md

index ce1f1d4b1c6132f4b401423b1503adb540a5749c..2c23f39b433f970d50654557fa7ac1bea5cea77b 100644 (file)
@@ -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,
 }
 
index 706945042c11850d762a499e490629898d8f939f..8e31922c9aa4511fda83822146f81574e2f3b268 100644 (file)
@@ -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)
        }
 }
index 89d85396cb95e3b4bea8c8db27296be9bc1c6717..8c28c1856fd74ffd080948ba6ca1e13dd09c70f7 100644 (file)
@@ -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,