on main help sign in
feat(config): allow configure the default diff mode (#454)
commitdf23e9ab003a5a7d1ab72782642747c06917642e authorbbrodriges <bender.rodriges@gmail.com> dateMon 11 Aug 2025, 20:03 (1 year ago) parentdce9578
4 files changed+41−5
internal/config/config.go+2−1 internal/tui/components/dialogs/permissions/permissions.go+28−3 internal/tui/tui.go+3−1 schema.json+8
internal/config/config.go+2−1
@@ -123,7 +123,8 @@ type LSPConfig struct {
123123}
124124
125125type TUIOptions struct {
126− CompactMode bool `json:"compact_mode,omitempty" jsonschema:"description=Enable compact mode for the TUI interface,default=false"`
126+ CompactMode bool `json:"compact_mode,omitempty" jsonschema:"description=Enable compact mode for the TUI interface,default=false"`
127+ DiffMode string `json:"diff_mode,omitempty" jsonschema:"description=Diff mode for the TUI interface,enum=unified,enum=split"`
127128 // Here we can add themes later or any TUI related options
128129}
129130
internal/tui/components/dialogs/permissions/permissions.go+28−3
@@ -69,13 +69,18 @@ type permissionDialogCmp struct {
6969 keyMap KeyMap
7070}
7171
72−func NewPermissionDialogCmp(permission permission.PermissionRequest) PermissionDialogCmp {
72+func NewPermissionDialogCmp(permission permission.PermissionRequest, opts *Options) PermissionDialogCmp {
73+ if opts == nil {
74+ opts = &Options{}
75+ }
76+
7377 // Create viewport for content
7478 contentViewport := viewport.New()
7579 return &permissionDialogCmp{
7680 contentViewPort: contentViewport,
7781 selectedOption: 0, // Default to "Allow"
7882 permission: permission,
83+ diffSplitMode: opts.isSplitMode(),
7984 keyMap: DefaultKeyMap(),
8085 contentDirty: true, // Mark as dirty initially
8186 }
@@ -643,9 +648,8 @@ func (p *permissionDialogCmp) generateDefaultContent() string {
643648func (p *permissionDialogCmp) useDiffSplitMode() bool {
644649 if p.diffSplitMode != nil {
645650 return *p.diffSplitMode
646− } else {
647− return p.defaultDiffSplitMode
648651 }
652+ return p.defaultDiffSplitMode
649653}
650654
651655func (p *permissionDialogCmp) styleViewport() string {
@@ -789,3 +793,24 @@ func (p *permissionDialogCmp) ID() dialogs.DialogID {
789793func (p *permissionDialogCmp) Position() (int, int) {
790794 return p.positionRow, p.positionCol
791795}
796+
797+// Options for create a new permission dialog
798+type Options struct {
799+ DiffMode string // split or unified, empty means use defaultDiffSplitMode
800+}
801+
802+// isSplitMode returns internal representation of diff mode switch
803+func (o Options) isSplitMode() *bool {
804+ var split bool
805+
806+ switch o.DiffMode {
807+ case "split":
808+ split = true
809+ case "unified":
810+ split = false
811+ default:
812+ return nil
813+ }
814+
815+ return &split
816+}
internal/tui/tui.go+3−1
@@ -215,7 +215,9 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
215215 return a, cmd
216216 case pubsub.Event[permission.PermissionRequest]:
217217 return a, util.CmdHandler(dialogs.OpenDialogMsg{
218− Model: permissions.NewPermissionDialogCmp(msg.Payload),
218+ Model: permissions.NewPermissionDialogCmp(msg.Payload, &permissions.Options{
219+ DiffMode: config.Get().Options.TUI.DiffMode,
220+ }),
219221 })
220222 case permissions.PermissionResponseMsg:
221223 switch msg.Action {
schema.json+8
@@ -387,6 +387,14 @@
387387 "type": "boolean",
388388 "description": "Enable compact mode for the TUI interface",
389389 "default": false
390+ },
391+ "diff_mode": {
392+ "type": "string",
393+ "enum": [
394+ "unified",
395+ "split"
396+ ],
397+ "description": "Diff mode for the TUI interface"
390398 }
391399 },
392400 "additionalProperties": false,