commit a17bc6a96a06dc345aa1c0bf1868f60e76e6c6f3
parent c7806f0d0e2ee625e37e7ff2b043349ff377f2cf
Author: Sean Enck <sean@ttypty.com>
Date: Sun, 21 Jul 2024 21:07:00 -0400
color path should be common for all of lockbox (if needed)
Diffstat:
3 files changed, 51 insertions(+), 20 deletions(-)
diff --git a/internal/app/totp.go b/internal/app/totp.go
@@ -156,7 +156,7 @@ func (args *TOTPArguments) display(opts TOTPOptions) error {
if err != nil {
return err
}
- allowColor, err := canColor()
+ allowColor, err := config.CanColor()
if err != nil {
return err
}
@@ -195,9 +195,7 @@ func (args *TOTPArguments) display(opts TOTPOptions) error {
}
txt := fmt.Sprintf("%s (%s)", now.Format("15:04:05"), leftString)
if isColor {
- if _, noColor := os.LookupEnv("NO_COLOR"); !noColor {
- txt = fmt.Sprintf("\x1b[31m%s\x1b[39m", txt)
- }
+ txt = fmt.Sprintf("\x1b[31m%s\x1b[39m", txt)
}
outputs := []string{txt}
if !clip {
@@ -293,19 +291,3 @@ func NewTOTPArguments(args []string, tokenType string) (*TOTPArguments, error) {
}
return opts, nil
}
-
-func canColor() (bool, error) {
- interactive, err := config.EnvInteractive.Get()
- if err != nil {
- return false, err
- }
- colors := interactive
- if colors {
- isColored, err := config.EnvNoColor.Get()
- if err != nil {
- return false, err
- }
- colors = !isColored
- }
- return colors, nil
-}
diff --git a/internal/config/vars.go b/internal/config/vars.go
@@ -5,6 +5,7 @@ import (
"flag"
"fmt"
"net/url"
+ "os"
"sort"
"strings"
"time"
@@ -377,3 +378,23 @@ func LoadCompletionProfiles() []CompletionProfile {
profiles = append(profiles, CompletionProfile{Clip: true, Write: true, TOTP: true, List: true, Default: true})
return profiles
}
+
+// CanColor indicates if colorized output is allowed (or disabled)
+func CanColor() (bool, error) {
+ if _, noColor := os.LookupEnv("NO_COLOR"); noColor {
+ return false, nil
+ }
+ interactive, err := EnvInteractive.Get()
+ if err != nil {
+ return false, err
+ }
+ colors := interactive
+ if colors {
+ isColored, err := EnvNoColor.Get()
+ if err != nil {
+ return false, err
+ }
+ colors = !isColored
+ }
+ return colors, nil
+}
diff --git a/internal/config/vars_test.go b/internal/config/vars_test.go
@@ -307,3 +307,31 @@ func TestLoadCompletionProfiles(t *testing.T) {
}
}
}
+
+func TestCanColor(t *testing.T) {
+ defer os.Clearenv()
+ os.Clearenv()
+ if can, _ := config.CanColor(); !can {
+ t.Error("should be able to color")
+ }
+ for raw, expect := range map[string]bool{
+ "INTERACTIVE": true,
+ "NOCOLOR": false,
+ } {
+ os.Clearenv()
+ key := fmt.Sprintf("LOCKBOX_%s", raw)
+ os.Setenv(key, "yes")
+ if can, _ := config.CanColor(); can != expect {
+ t.Errorf("expect != actual: %s", key)
+ }
+ os.Setenv(key, "no")
+ if can, _ := config.CanColor(); can == expect {
+ t.Errorf("expect == actual: %s", key)
+ }
+ }
+ os.Clearenv()
+ os.Setenv("NO_COLOR", "1")
+ if can, _ := config.CanColor(); can {
+ t.Error("should NOT be able to color")
+ }
+}