diff --git a/internal/tui/components/dialogs/permissions/permissions.go b/internal/tui/components/dialogs/permissions/permissions.go index 0bbaa034ed2357cc4643ad92c0a680bb01cf61ff..4370d99e3fbf5490beb67422c9f102195482948c 100644 --- a/internal/tui/components/dialogs/permissions/permissions.go +++ b/internal/tui/components/dialogs/permissions/permissions.go @@ -52,9 +52,10 @@ type permissionDialogCmp struct { selectedOption int // 0: Allow, 1: Allow for session, 2: Deny // Diff view state - diffSplitMode bool // true for split, false for unified - diffXOffset int // horizontal scroll offset - diffYOffset int // vertical scroll offset + defaultDiffSplitMode bool // true for split, false for unified + diffSplitMode *bool // nil means use defaultDiffSplitMode + diffXOffset int // horizontal scroll offset + diffYOffset int // vertical scroll offset // Caching cachedContent string @@ -122,7 +123,12 @@ func (p *permissionDialogCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) { ) case key.Matches(msg, p.keyMap.ToggleDiffMode): if p.supportsDiffView() { - p.diffSplitMode = !p.diffSplitMode + if p.diffSplitMode == nil { + diffSplitMode := !p.defaultDiffSplitMode + p.diffSplitMode = &diffSplitMode + } else { + *p.diffSplitMode = !*p.diffSplitMode + } p.contentDirty = true // Mark content as dirty when diff mode changes return p, nil } @@ -354,7 +360,7 @@ func (p *permissionDialogCmp) generateEditContent() string { Width(p.contentViewPort.Width()). XOffset(p.diffXOffset). YOffset(p.diffYOffset) - if p.diffSplitMode { + if p.useDiffSplitMode() { formatter = formatter.Split() } else { formatter = formatter.Unified() @@ -376,7 +382,7 @@ func (p *permissionDialogCmp) generateWriteContent() string { Width(p.contentViewPort.Width()). XOffset(p.diffXOffset). YOffset(p.diffYOffset) - if p.diffSplitMode { + if p.useDiffSplitMode() { formatter = formatter.Split() } else { formatter = formatter.Unified() @@ -425,6 +431,14 @@ func (p *permissionDialogCmp) generateDefaultContent() string { return finalContent } +func (p *permissionDialogCmp) useDiffSplitMode() bool { + if p.diffSplitMode != nil { + return *p.diffSplitMode + } else { + return p.defaultDiffSplitMode + } +} + func (p *permissionDialogCmp) styleViewport() string { t := styles.CurrentTheme() return t.S().Base.Render(p.contentViewPort.View()) @@ -512,6 +526,9 @@ func (p *permissionDialogCmp) SetSize() tea.Cmd { p.height = int(float64(p.wHeight) * 0.5) } + // Default to diff split mode when dialog is wide enough. + p.defaultDiffSplitMode = p.width >= 140 + // Mark content as dirty if size changed if oldWidth != p.width || oldHeight != p.height { p.contentDirty = true