@@ -52,9 +52,10 @@ type permissionDialogCmp struct {
5252 selectedOption int // 0: Allow, 1: Allow for session, 2: Deny
5353
5454 // Diff view state
55− diffSplitMode bool // true for split, false for unified
56− diffXOffset int // horizontal scroll offset
57− diffYOffset int // vertical scroll offset
55+ defaultDiffSplitMode bool // true for split, false for unified
56+ diffSplitMode *bool // nil means use defaultDiffSplitMode
57+ diffXOffset int // horizontal scroll offset
58+ diffYOffset int // vertical scroll offset
5859
5960 // Caching
6061 cachedContent string
@@ -122,7 +123,12 @@ func (p *permissionDialogCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
122123 )
123124 case key.Matches(msg, p.keyMap.ToggleDiffMode):
124125 if p.supportsDiffView() {
125− p.diffSplitMode = !p.diffSplitMode
126+ if p.diffSplitMode == nil {
127+ diffSplitMode := !p.defaultDiffSplitMode
128+ p.diffSplitMode = &diffSplitMode
129+ } else {
130+ *p.diffSplitMode = !*p.diffSplitMode
131+ }
126132 p.contentDirty = true // Mark content as dirty when diff mode changes
127133 return p, nil
128134 }
@@ -354,7 +360,7 @@ func (p *permissionDialogCmp) generateEditContent() string {
354360 Width(p.contentViewPort.Width()).
355361 XOffset(p.diffXOffset).
356362 YOffset(p.diffYOffset)
357− if p.diffSplitMode {
363+ if p.useDiffSplitMode() {
358364 formatter = formatter.Split()
359365 } else {
360366 formatter = formatter.Unified()
@@ -376,7 +382,7 @@ func (p *permissionDialogCmp) generateWriteContent() string {
376382 Width(p.contentViewPort.Width()).
377383 XOffset(p.diffXOffset).
378384 YOffset(p.diffYOffset)
379− if p.diffSplitMode {
385+ if p.useDiffSplitMode() {
380386 formatter = formatter.Split()
381387 } else {
382388 formatter = formatter.Unified()
@@ -425,6 +431,14 @@ func (p *permissionDialogCmp) generateDefaultContent() string {
425431 return finalContent
426432}
427433
434+func (p *permissionDialogCmp) useDiffSplitMode() bool {
435+ if p.diffSplitMode != nil {
436+ return *p.diffSplitMode
437+ } else {
438+ return p.defaultDiffSplitMode
439+ }
440+}
441+
428442func (p *permissionDialogCmp) styleViewport() string {
429443 t := styles.CurrentTheme()
430444 return t.S().Base.Render(p.contentViewPort.View())
@@ -512,6 +526,9 @@ func (p *permissionDialogCmp) SetSize() tea.Cmd {
512526 p.height = int(float64(p.wHeight) * 0.5)
513527 }
514528
529+ // Default to diff split mode when dialog is wide enough.
530+ p.defaultDiffSplitMode = p.width >= 140
531+
515532 // Mark content as dirty if size changed
516533 if oldWidth != p.width || oldHeight != p.height {
517534 p.contentDirty = true