on main help sign in
Merge pull request #203 from charmbracelet/charm-269
9c79c19Kujtim Hoxha
internal/tui/components/dialogs/permissions/permissions.go+23−6
@@ -52,9 +52,10 @@ type permissionDialogCmp struct {
52 selectedOption int // 0: Allow, 1: Allow for session, 2: Deny
52 selectedOption int // 0: Allow, 1: Allow for session, 2: Deny
53
53
54 // Diff view state
54 // Diff view state
55− diffSplitMode bool // true for split, false for unified
55+ defaultDiffSplitMode bool // true for split, false for unified
56+ diffSplitMode *bool // nil means use defaultDiffSplitMode
56− diffXOffset int // horizontal scroll offset
57+ diffXOffset int // horizontal scroll offset
57− diffYOffset int // vertical scroll offset
58+ diffYOffset int // vertical scroll offset
58
59
59 // Caching
60 // Caching
60 cachedContent string
61 cachedContent string
@@ -122,7 +123,12 @@ func (p *permissionDialogCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
122 )
123 )
123 case key.Matches(msg, p.keyMap.ToggleDiffMode):
124 case key.Matches(msg, p.keyMap.ToggleDiffMode):
124 if p.supportsDiffView() {
125 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+ }
126 p.contentDirty = true // Mark content as dirty when diff mode changes
132 p.contentDirty = true // Mark content as dirty when diff mode changes
127 return p, nil
133 return p, nil
128 }
134 }
@@ -354,7 +360,7 @@ func (p *permissionDialogCmp) generateEditContent() string {
354 Width(p.contentViewPort.Width()).
360 Width(p.contentViewPort.Width()).
355 XOffset(p.diffXOffset).
361 XOffset(p.diffXOffset).
356 YOffset(p.diffYOffset)
362 YOffset(p.diffYOffset)
357− if p.diffSplitMode {
363+ if p.useDiffSplitMode() {
358 formatter = formatter.Split()
364 formatter = formatter.Split()
359 } else {
365 } else {
360 formatter = formatter.Unified()
366 formatter = formatter.Unified()
@@ -376,7 +382,7 @@ func (p *permissionDialogCmp) generateWriteContent() string {
376 Width(p.contentViewPort.Width()).
382 Width(p.contentViewPort.Width()).
377 XOffset(p.diffXOffset).
383 XOffset(p.diffXOffset).
378 YOffset(p.diffYOffset)
384 YOffset(p.diffYOffset)
379− if p.diffSplitMode {
385+ if p.useDiffSplitMode() {
380 formatter = formatter.Split()
386 formatter = formatter.Split()
381 } else {
387 } else {
382 formatter = formatter.Unified()
388 formatter = formatter.Unified()
@@ -425,6 +431,14 @@ func (p *permissionDialogCmp) generateDefaultContent() string {
425 return finalContent
431 return finalContent
426}
432}
427
433
434+func (p *permissionDialogCmp) useDiffSplitMode() bool {
435+ if p.diffSplitMode != nil {
436+ return *p.diffSplitMode
437+ } else {
438+ return p.defaultDiffSplitMode
439+ }
440+}
441+
428func (p *permissionDialogCmp) styleViewport() string {
442func (p *permissionDialogCmp) styleViewport() string {
429 t := styles.CurrentTheme()
443 t := styles.CurrentTheme()
430 return t.S().Base.Render(p.contentViewPort.View())
444 return t.S().Base.Render(p.contentViewPort.View())
@@ -512,6 +526,9 @@ func (p *permissionDialogCmp) SetSize() tea.Cmd {
512 p.height = int(float64(p.wHeight) * 0.5)
526 p.height = int(float64(p.wHeight) * 0.5)
513 }
527 }
514
528
529+ // Default to diff split mode when dialog is wide enough.
530+ p.defaultDiffSplitMode = p.width >= 140
531+
515 // Mark content as dirty if size changed
532 // Mark content as dirty if size changed
516 if oldWidth != p.width || oldHeight != p.height {
533 if oldWidth != p.width || oldHeight != p.height {
517 p.contentDirty = true
534 p.contentDirty = true