mirror of
https://github.com/charmbracelet/glow.git
synced 2026-08-20 07:04:17 +02:00
Merge 18ea417d52 into e5cb757278
This commit is contained in:
commit
14c777a347
3 changed files with 102 additions and 15 deletions
|
|
@ -158,6 +158,8 @@ The `-w` flag lets you set a maximum width at which the output will be wrapped:
|
|||
glow -w 60
|
||||
```
|
||||
|
||||
When `-w` is not provided, Glow will use your terminal's current width when possible.
|
||||
|
||||
### Paging
|
||||
|
||||
CLI output can be displayed in your preferred pager with the `-p` flag. This defaults
|
||||
|
|
|
|||
37
main.go
37
main.go
|
|
@ -164,6 +164,22 @@ func validateStyle(style string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func resolveWidth(isTerminal bool, configuredWidth uint, widthFlagChanged bool, getTerminalWidth func() (int, error)) uint {
|
||||
width := configuredWidth
|
||||
if !widthFlagChanged {
|
||||
if isTerminal && width == 0 {
|
||||
w, err := getTerminalWidth()
|
||||
if err == nil && w > 0 {
|
||||
width = uint(w) //nolint:gosec
|
||||
}
|
||||
}
|
||||
if width == 0 {
|
||||
width = 80
|
||||
}
|
||||
}
|
||||
return width
|
||||
}
|
||||
|
||||
func validateOptions(cmd *cobra.Command) error {
|
||||
// grab config values from Viper
|
||||
width = viper.GetUint("width")
|
||||
|
|
@ -191,22 +207,13 @@ func validateOptions(cmd *cobra.Command) error {
|
|||
style = "notty"
|
||||
}
|
||||
|
||||
// Detect terminal width
|
||||
if !cmd.Flags().Changed("width") { //nolint:nestif
|
||||
if isTerminal && width == 0 {
|
||||
w, _, err := term.GetSize(int(os.Stdout.Fd()))
|
||||
if err == nil {
|
||||
width = uint(w) //nolint:gosec
|
||||
}
|
||||
|
||||
if width > 120 {
|
||||
width = 120
|
||||
}
|
||||
width = resolveWidth(isTerminal, width, cmd.Flags().Changed("width"), func() (int, error) {
|
||||
w, _, err := term.GetSize(int(os.Stdout.Fd()))
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if width == 0 {
|
||||
width = 80
|
||||
}
|
||||
}
|
||||
return w, nil
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
78
main_width_test.go
Normal file
78
main_width_test.go
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestResolveWidth(t *testing.T) {
|
||||
tt := []struct {
|
||||
name string
|
||||
isTerminal bool
|
||||
configuredWidth uint
|
||||
flagChanged bool
|
||||
detectedWidth int
|
||||
detectErr error
|
||||
want uint
|
||||
}{
|
||||
{
|
||||
name: "explicit width keeps configured value",
|
||||
isTerminal: true,
|
||||
configuredWidth: 40,
|
||||
flagChanged: true,
|
||||
detectedWidth: 180,
|
||||
want: 40,
|
||||
},
|
||||
{
|
||||
name: "explicit zero width is preserved",
|
||||
isTerminal: true,
|
||||
configuredWidth: 0,
|
||||
flagChanged: true,
|
||||
detectedWidth: 180,
|
||||
want: 0,
|
||||
},
|
||||
{
|
||||
name: "auto width uses detected terminal width",
|
||||
isTerminal: true,
|
||||
configuredWidth: 0,
|
||||
flagChanged: false,
|
||||
detectedWidth: 100,
|
||||
want: 100,
|
||||
},
|
||||
{
|
||||
name: "auto width no longer caps terminal width",
|
||||
isTerminal: true,
|
||||
configuredWidth: 0,
|
||||
flagChanged: false,
|
||||
detectedWidth: 180,
|
||||
want: 180,
|
||||
},
|
||||
{
|
||||
name: "auto width falls back when detection fails",
|
||||
isTerminal: true,
|
||||
configuredWidth: 0,
|
||||
flagChanged: false,
|
||||
detectErr: errors.New("boom"),
|
||||
want: 80,
|
||||
},
|
||||
{
|
||||
name: "non-tty fallback remains 80",
|
||||
isTerminal: false,
|
||||
configuredWidth: 0,
|
||||
flagChanged: false,
|
||||
want: 80,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range tt {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
got := resolveWidth(tc.isTerminal, tc.configuredWidth, tc.flagChanged, func() (int, error) {
|
||||
return tc.detectedWidth, tc.detectErr
|
||||
})
|
||||
|
||||
if got != tc.want {
|
||||
t.Fatalf("resolveWidth() = %d, want %d", got, tc.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue