Skip to content

Commit b9fcd0b

Browse files
committed
fix(color): respect TTY detection for ANSI color output
Changes: - Add internal/colors package centralizing color handling - Only override auto-detection when --color or --no-color explicitly set, letting fatih/color's isatty detection do its job - Consolidate color constructors to avoid duplication across packages Signed-off-by: Peter A. <[email protected]>
1 parent 74edcfd commit b9fcd0b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+540
-213
lines changed

cmd/ipsw/cmd/appstore/appstore_profile_info.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ import (
2828

2929
"github.com/alecthomas/chroma/v2/quick"
3030
"github.com/blacktop/go-plist"
31+
"github.com/blacktop/ipsw/internal/colors"
3132
"github.com/fullsailor/pkcs7"
3233
"github.com/spf13/cobra"
33-
"github.com/spf13/viper"
3434
)
3535

3636
func init() {
@@ -73,7 +73,7 @@ var ASProfileInfoCmd = &cobra.Command{
7373
return fmt.Errorf("failed to marshal json: %v", err)
7474
}
7575

76-
if viper.GetBool("color") && !viper.GetBool("no-color") {
76+
if colors.Active() {
7777
if err := quick.Highlight(os.Stdout, string(jsonData)+"\n", "json", "terminal256", "nord"); err != nil {
7878
return fmt.Errorf("failed to highlight json: %v", err)
7979
}

cmd/ipsw/cmd/class_dump.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/alecthomas/chroma/v2/styles"
3232
"github.com/apex/log"
3333
"github.com/blacktop/go-macho"
34+
"github.com/blacktop/ipsw/internal/colors"
3435
mcmd "github.com/blacktop/ipsw/internal/commands/macho"
3536
"github.com/blacktop/ipsw/internal/magic"
3637
"github.com/blacktop/ipsw/pkg/dyld"
@@ -157,7 +158,7 @@ var classDumpCmd = &cobra.Command{
157158
// Generic: viper.GetBool("class-dump.generic"),
158159
Demangle: demangleOpt,
159160
IpswVersion: fmt.Sprintf("Version: %s, BuildCommit: %s", strings.TrimSpace(AppVersion), strings.TrimSpace(AppBuildCommit)),
160-
Color: viper.GetBool("color") && !viper.GetBool("no-color"),
161+
Color: colors.Active(),
161162
Theme: viper.GetString("class-dump.theme"),
162163
Output: viper.GetString("class-dump.output"),
163164
}

cmd/ipsw/cmd/download/download_appledb.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
"github.com/MakeNowJust/heredoc/v2"
3636
"github.com/alecthomas/chroma/v2/quick"
3737
"github.com/apex/log"
38+
"github.com/blacktop/ipsw/internal/colors"
3839
"github.com/blacktop/ipsw/internal/commands/extract"
3940
"github.com/blacktop/ipsw/internal/download"
4041
"github.com/blacktop/ipsw/internal/utils"
@@ -323,7 +324,7 @@ var downloadAppledbCmd = &cobra.Command{
323324
if err != nil {
324325
return err
325326
}
326-
if viper.GetBool("color") && !viper.GetBool("no-color") {
327+
if colors.Active() {
327328
if err := quick.Highlight(os.Stdout, string(b)+"\n", "json", "terminal256", "nord"); err != nil {
328329
return fmt.Errorf("failed to highlight json: %v", err)
329330
}
@@ -367,7 +368,7 @@ var downloadAppledbCmd = &cobra.Command{
367368
return fmt.Errorf("failed to marshal json: %v", err)
368369
}
369370

370-
if viper.GetBool("color") && !viper.GetBool("no-color") {
371+
if colors.Active() {
371372
if err := quick.Highlight(os.Stdout, string(jsonData)+"\n", "json", "terminal256", "nord"); err != nil {
372373
return fmt.Errorf("failed to highlight json: %v", err)
373374
}

cmd/ipsw/cmd/download/download_ota.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ import (
3535
"github.com/apex/log"
3636
"github.com/blacktop/ipsw/internal/commands/extract"
3737
"github.com/blacktop/ipsw/internal/download"
38+
"github.com/blacktop/ipsw/internal/colors"
3839
"github.com/blacktop/ipsw/internal/utils"
3940
"github.com/blacktop/ipsw/pkg/dyld"
4041
"github.com/blacktop/ipsw/pkg/ota/types"
4142
"github.com/dustin/go-humanize"
42-
"github.com/fatih/color"
4343
semver "github.com/hashicorp/go-version"
4444
"github.com/pkg/errors"
4545
"github.com/spf13/cobra"
@@ -252,9 +252,9 @@ var downloadOtaCmd = &cobra.Command{
252252
for _, dl := range dvt.Downloadables {
253253
fmt.Printf("%-40s %s=%s\t%s=%s\n",
254254
dl.Name,
255-
color.New(color.Bold, color.FgHiBlue).Sprint("build"),
255+
colors.BoldHiBlue().Sprint("build"),
256256
dl.SimulatorVersion.BuildUpdate,
257-
color.New(color.Bold, color.FgHiBlue).Sprint("size"),
257+
colors.BoldHiBlue().Sprint("size"),
258258
humanize.Bytes(uint64(dl.FileSize)),
259259
)
260260
}

cmd/ipsw/cmd/dyld/dyld.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,20 @@ package dyld
2424
import (
2525
"path/filepath"
2626

27+
"github.com/blacktop/ipsw/internal/colors"
2728
"github.com/blacktop/ipsw/pkg/dyld"
28-
"github.com/fatih/color"
2929
"github.com/spf13/cobra"
3030
)
3131

32-
var symAddrColor = color.New(color.Faint).SprintfFunc()
33-
var symTypeColor = color.New(color.Faint, color.FgCyan).SprintfFunc()
34-
var symLibColor = color.New(color.Faint, color.FgMagenta).SprintfFunc()
35-
var symNameColor = color.New(color.Bold).SprintFunc()
32+
var symAddrColor = colors.Faint().SprintfFunc()
33+
var symTypeColor = colors.FaintCyan().SprintfFunc()
34+
var symLibColor = colors.FaintMagenta().SprintfFunc()
35+
var symNameColor = colors.Bold().SprintFunc()
3636

37-
var colorAddr = color.New(color.Faint).SprintfFunc()
38-
var colorImage = color.New(color.Bold, color.FgHiMagenta).SprintFunc()
39-
var colorField = color.New(color.Bold, color.FgHiBlue).SprintFunc()
40-
var colorClassField = color.New(color.Bold, color.FgHiMagenta).SprintFunc()
37+
var colorAddr = colors.Faint().SprintfFunc()
38+
var colorImage = colors.BoldHiMagenta().SprintFunc()
39+
var colorField = colors.BoldHiBlue().SprintFunc()
40+
var colorClassField = colors.BoldHiMagenta().SprintFunc()
4141

4242
type dscFunc struct {
4343
Addr uint64 `json:"addr,omitempty"`

cmd/ipsw/cmd/dyld/dyld_disass.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"github.com/alecthomas/chroma/v2/styles"
3434
"github.com/apex/log"
3535
"github.com/blacktop/ipsw/internal/ai"
36+
"github.com/blacktop/ipsw/internal/colors"
3637
dcmd "github.com/blacktop/ipsw/internal/commands/disass"
3738
"github.com/blacktop/ipsw/pkg/disass"
3839
"github.com/blacktop/ipsw/pkg/dyld"
@@ -239,7 +240,7 @@ var DisassCmd = &cobra.Command{
239240
AsJSON: asJSON,
240241
Demangle: demangleFlag,
241242
Quiet: quiet,
242-
Color: viper.GetBool("color") && !viper.GetBool("no-color") && !decompile,
243+
Color: colors.Active(),
243244
})
244245

245246
if !quiet {
@@ -289,7 +290,7 @@ var DisassCmd = &cobra.Command{
289290
Stream: false,
290291
DisableCache: viper.GetBool("dyld.disass.dec-nocache"),
291292
Verbose: viper.GetBool("verbose"),
292-
Color: viper.GetBool("color") && !viper.GetBool("no-color"),
293+
Color: colors.Active(),
293294
Theme: viper.GetString("dyld.disass.dec-theme"),
294295
MaxRetries: viper.GetInt("dyld.disass.dec-retries"),
295296
RetryBackoff: viper.GetDuration("dyld.disass.dec-retry-backoff"),
@@ -356,7 +357,7 @@ var DisassCmd = &cobra.Command{
356357
AsJSON: asJSON,
357358
Demangle: demangleFlag,
358359
Quiet: quiet,
359-
Color: viper.GetBool("color") && !viper.GetBool("no-color") && !decompile,
360+
Color: colors.Active() && !decompile,
360361
})
361362

362363
if !quiet {
@@ -411,7 +412,7 @@ var DisassCmd = &cobra.Command{
411412
Stream: false,
412413
DisableCache: viper.GetBool("dyld.disass.dec-nocache"),
413414
Verbose: viper.GetBool("verbose"),
414-
Color: viper.GetBool("color") && !viper.GetBool("no-color"),
415+
Color: colors.Active(),
415416
Theme: viper.GetString("dyld.disass.dec-theme"),
416417
MaxRetries: viper.GetInt("dyld.disass.dec-retries"),
417418
RetryBackoff: viper.GetDuration("dyld.disass.dec-retry-backoff"),
@@ -504,7 +505,7 @@ var DisassCmd = &cobra.Command{
504505
AsJSON: asJSON,
505506
Demangle: demangleFlag,
506507
Quiet: quiet,
507-
Color: viper.GetBool("color") && !viper.GetBool("no-color") && !decompile,
508+
Color: colors.Active() && !decompile,
508509
})
509510

510511
if !quiet {
@@ -550,7 +551,7 @@ var DisassCmd = &cobra.Command{
550551
Stream: false,
551552
DisableCache: viper.GetBool("dyld.disass.dec-nocache"),
552553
Verbose: viper.GetBool("verbose"),
553-
Color: viper.GetBool("color") && !viper.GetBool("no-color"),
554+
Color: colors.Active(),
554555
Theme: viper.GetString("dyld.disass.dec-theme"),
555556
MaxRetries: viper.GetInt("dyld.disass.dec-retries"),
556557
RetryBackoff: viper.GetDuration("dyld.disass.dec-retry-backoff"),

cmd/ipsw/cmd/dyld/dyld_emu.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ import (
2929
"path/filepath"
3030

3131
"github.com/apex/log"
32+
"github.com/blacktop/ipsw/internal/colors"
3233
"github.com/blacktop/ipsw/pkg/dyld"
3334
"github.com/blacktop/ipsw/pkg/emu"
34-
"github.com/fatih/color"
3535
"github.com/pkg/errors"
3636
"github.com/spf13/cobra"
3737
"github.com/spf13/viper"
@@ -110,7 +110,7 @@ var dyldEmuCmd = &cobra.Command{
110110
if err != nil {
111111
return err
112112
}
113-
fmt.Print(color.New(color.Bold).Sprintf("\n%s:", symbolName))
113+
fmt.Print(colors.Bold().Sprintf("\n%s:", symbolName))
114114
} else {
115115
image, err = f.GetImageContainingVMAddr(startAddr)
116116
if err != nil {

cmd/ipsw/cmd/dyld/dyld_info.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
"github.com/alecthomas/chroma/v2/quick"
3636
"github.com/apex/log"
3737
"github.com/blacktop/go-macho"
38+
"github.com/blacktop/ipsw/internal/colors"
3839
dscCmd "github.com/blacktop/ipsw/internal/commands/dsc"
3940
"github.com/blacktop/ipsw/internal/utils"
4041
"github.com/blacktop/ipsw/pkg/dyld"
@@ -326,7 +327,7 @@ var dyldInfoCmd = &cobra.Command{
326327
}
327328
w.Flush()
328329

329-
if viper.GetBool("color") && !viper.GetBool("no-color") {
330+
if colors.Active() {
330331
if err := quick.Highlight(os.Stdout, buf.String(), "md", "terminal256", "nord"); err != nil {
331332
return err
332333
}
@@ -359,7 +360,10 @@ var dyldInfoCmd = &cobra.Command{
359360
out, err := utils.GitDiff(
360361
strings.Join(dout1, "\n")+"\n",
361362
strings.Join(dout2, "\n")+"\n",
362-
&utils.GitDiffConfig{Color: viper.GetBool("color") && !viper.GetBool("no-color"), Tool: viper.GetString("diff-tool")})
363+
&utils.GitDiffConfig{
364+
Color: colors.Active(),
365+
Tool: viper.GetString("diff-tool"),
366+
})
363367
if err != nil {
364368
return err
365369
}

cmd/ipsw/cmd/dyld/dyld_macho.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"github.com/apex/log"
3434
"github.com/blacktop/go-macho/pkg/fixupchains"
3535
"github.com/blacktop/go-macho/pkg/swift"
36+
"github.com/blacktop/ipsw/internal/colors"
3637
mcmd "github.com/blacktop/ipsw/internal/commands/macho"
3738
"github.com/blacktop/ipsw/internal/demangle"
3839
"github.com/blacktop/ipsw/pkg/dyld"
@@ -272,7 +273,7 @@ var MachoCmd = &cobra.Command{
272273
Addrs: true,
273274
ObjcRefs: showObjcRefs,
274275
Demangle: doDemangle,
275-
Color: viper.GetBool("color") && !viper.GetBool("no-color") && !viper.GetBool("no-color"),
276+
Color: colors.Active(),
276277
Theme: "nord",
277278
})
278279
if err != nil {
@@ -320,7 +321,7 @@ var MachoCmd = &cobra.Command{
320321
Addrs: true,
321322
All: showSwiftAll,
322323
Demangle: doDemangle,
323-
Color: viper.GetBool("color") && !viper.GetBool("no-color") && !viper.GetBool("no-color"),
324+
Color: colors.Active(),
324325
Theme: "nord",
325326
})
326327
if err != nil {

cmd/ipsw/cmd/dyld/dyld_symaddr.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ import (
2929
"path/filepath"
3030

3131
"github.com/apex/log"
32+
"github.com/blacktop/ipsw/internal/colors"
3233
dscCmd "github.com/blacktop/ipsw/internal/commands/dsc"
3334
"github.com/blacktop/ipsw/internal/utils"
3435
"github.com/blacktop/ipsw/pkg/dyld"
35-
"github.com/fatih/color"
3636
"github.com/pkg/errors"
3737
"github.com/spf13/cobra"
3838
"github.com/spf13/viper"
@@ -67,10 +67,6 @@ var SymAddrCmd = &cobra.Command{
6767
},
6868
SilenceErrors: true,
6969
RunE: func(cmd *cobra.Command, args []string) error {
70-
71-
useColor := viper.GetBool("color") && !viper.GetBool("no-color")
72-
color.NoColor = !useColor
73-
7470
imageName := viper.GetString("dyld.symaddr.image")
7571
symbolFile := viper.GetString("dyld.symaddr.in")
7672
jsonFile := viper.GetString("dyld.symaddr.output")
@@ -150,7 +146,7 @@ var SymAddrCmd = &cobra.Command{
150146
}
151147

152148
if lsym, err := i.GetSymbol(args[1]); err == nil {
153-
fmt.Println(lsym.String(useColor))
149+
fmt.Println(lsym.String(colors.Active()))
154150
}
155151

156152
// if lsym, err := i.GetLocalSymbol(args[1]); err == nil {
@@ -179,7 +175,7 @@ var SymAddrCmd = &cobra.Command{
179175
if !ok {
180176
break
181177
}
182-
fmt.Println(sym.String(useColor))
178+
fmt.Println(sym.String(colors.Active()))
183179
if !allMatches {
184180
return nil
185181
}
@@ -189,7 +185,7 @@ var SymAddrCmd = &cobra.Command{
189185
utils.Indent(log.Debug, 2)("Searching " + image.Name)
190186
if sym, err := image.GetSymbol(args[1]); err == nil {
191187
if (sym.Address > 0 || allMatches) && (sym.Kind != dyld.BIND || showBinds) {
192-
fmt.Println(sym.String(useColor))
188+
fmt.Println(sym.String(colors.Active()))
193189
if !allMatches {
194190
return nil
195191
}

0 commit comments

Comments
 (0)