Allow customizing the window width/height thresholds for when to use portrait mode (#5452)

This commit is contained in:
Stefan Haller 2026-03-31 13:10:51 +02:00 committed by GitHub
commit 0c5b8f88e6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 129 additions and 3 deletions

View file

@ -298,6 +298,16 @@ gui:
# One of 'auto' (default) | 'always' | 'never'
portraitMode: auto
# In 'auto' mode, portrait mode will be used if the window width is less than or
# equal to portraitModeAutoMaxWidth and the window height is greater than or
# equal to portraitModeAutoMinHeight. Unused when portraitMode is not 'auto'.
portraitModeAutoMaxWidth: 84
# In 'auto' mode, portrait mode will be used if the window width is less than or
# equal to portraitModeAutoMaxWidth and the window height is greater than or
# equal to portraitModeAutoMinHeight. Unused when portraitMode is not 'auto'.
portraitModeAutoMinHeight: 46
# How things are filtered when typing '/'.
# One of 'substring' (default) | 'fuzzy'
filterMode: substring

View file

@ -187,6 +187,10 @@ type GuiConfig struct {
// Whether to stack UI components on top of each other.
// One of 'auto' (default) | 'always' | 'never'
PortraitMode string `yaml:"portraitMode"`
// In 'auto' mode, portrait mode will be used if the window width is less than or equal to portraitModeAutoMaxWidth and the window height is greater than or equal to portraitModeAutoMinHeight. Unused when portraitMode is not 'auto'.
PortraitModeAutoMaxWidth int `yaml:"portraitModeAutoMaxWidth"`
// In 'auto' mode, portrait mode will be used if the window width is less than or equal to portraitModeAutoMaxWidth and the window height is greater than or equal to portraitModeAutoMinHeight. Unused when portraitMode is not 'auto'.
PortraitModeAutoMinHeight int `yaml:"portraitModeAutoMinHeight"`
// How things are filtered when typing '/'.
// One of 'substring' (default) | 'fuzzy'
FilterMode string `yaml:"filterMode" jsonschema:"enum=substring,enum=fuzzy"`
@ -820,6 +824,8 @@ func GetDefaultConfig() *UserConfig {
Border: "rounded",
AnimateExplosion: true,
PortraitMode: "auto",
PortraitModeAutoMaxWidth: 84,
PortraitModeAutoMinHeight: 46,
FilterMode: "substring",
Spinner: SpinnerConfig{
Frames: []string{"|", "/", "-", "\\"},

View file

@ -116,7 +116,8 @@ func shouldUsePortraitMode(args WindowArrangementArgs) bool {
case "always":
return true
default: // "auto" or any garbage values in PortraitMode value
return args.Width <= 84 && args.Height > 45
return args.Width <= args.UserConfig.Gui.PortraitModeAutoMaxWidth &&
args.Height >= args.UserConfig.Gui.PortraitModeAutoMinHeight
}
}

View file

@ -285,7 +285,7 @@ func TestGetWindowDimensions(t *testing.T) {
{
name: "half screen mode, enlargedSideViewLocation left",
mutateArgs: func(args *WindowArrangementArgs) {
args.Height = 20 // smaller height because we don't more here
args.Height = 20 // smaller height because we don't need more here
args.ScreenMode = types.SCREEN_HALF
args.UserConfig.Gui.EnlargedSideViewLocation = "left"
},
@ -317,7 +317,7 @@ func TestGetWindowDimensions(t *testing.T) {
{
name: "half screen mode, enlargedSideViewLocation top",
mutateArgs: func(args *WindowArrangementArgs) {
args.Height = 20 // smaller height because we don't more here
args.Height = 20 // smaller height because we don't need more here
args.ScreenMode = types.SCREEN_HALF
args.UserConfig.Gui.EnlargedSideViewLocation = "top"
},
@ -346,6 +346,105 @@ func TestGetWindowDimensions(t *testing.T) {
B: information
`,
},
{
name: "portrait auto mode, enabled",
mutateArgs: func(args *WindowArrangementArgs) {
args.Width = 50
args.Height = 20
args.UserConfig.Gui.PortraitModeAutoMaxWidth = 50
args.UserConfig.Gui.PortraitModeAutoMinHeight = 20
},
expected: `
<status>
files
<branches>
<commits>
<stash>
main
<options>A<B>
A: statusSpacer1
B: information
`,
},
{
name: "portrait auto mode, disabled because width is too large",
mutateArgs: func(args *WindowArrangementArgs) {
args.Width = 50
args.Height = 20
args.UserConfig.Gui.PortraitModeAutoMaxWidth = 49
args.UserConfig.Gui.PortraitModeAutoMinHeight = 20
},
expected: `
<status>main
files
<branches>
<commits>
<stash>
<options>A<B>
A: statusSpacer1
B: information
`,
},
{
name: "portrait auto mode, disabled because height is too small",
mutateArgs: func(args *WindowArrangementArgs) {
args.Width = 50
args.Height = 20
args.UserConfig.Gui.PortraitModeAutoMaxWidth = 50
args.UserConfig.Gui.PortraitModeAutoMinHeight = 21
},
expected: `
<status>main
files
<branches>
<commits>
<stash>
<options>A<B>
A: statusSpacer1
B: information
`,
},
{
name: "search mode",
mutateArgs: func(args *WindowArrangementArgs) {

View file

@ -769,6 +769,16 @@
"description": "Whether to stack UI components on top of each other.\nOne of 'auto' (default) | 'always' | 'never'",
"default": "auto"
},
"portraitModeAutoMaxWidth": {
"type": "integer",
"description": "In 'auto' mode, portrait mode will be used if the window width is less than or equal to portraitModeAutoMaxWidth and the window height is greater than or equal to portraitModeAutoMinHeight. Unused when portraitMode is not 'auto'.",
"default": 84
},
"portraitModeAutoMinHeight": {
"type": "integer",
"description": "In 'auto' mode, portrait mode will be used if the window width is less than or equal to portraitModeAutoMaxWidth and the window height is greater than or equal to portraitModeAutoMinHeight. Unused when portraitMode is not 'auto'.",
"default": 46
},
"filterMode": {
"type": "string",
"enum": [