diff --git a/internal/config/config.go b/internal/config/config.go index 2735b5a536487b3137b3fd574a0455d284d06da1..18c97872b9717d01db8f124f475d92265f80a2eb 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -123,7 +123,8 @@ type LSPConfig struct { } type TUIOptions struct { - CompactMode bool `json:"compact_mode,omitempty" jsonschema:"description=Enable compact mode for the TUI interface,default=false"` + CompactMode bool `json:"compact_mode,omitempty" jsonschema:"description=Enable compact mode for the TUI interface,default=false"` + DiffMode string `json:"diff_mode,omitempty" jsonschema:"description=Diff mode for the TUI interface,enum=unified,enum=split"` // Here we can add themes later or any TUI related options } diff --git a/internal/tui/components/dialogs/permissions/permissions.go b/internal/tui/components/dialogs/permissions/permissions.go index c73f323ad690f58517466f9f43d713056e9cd621..2633c0a2f1a50f78adf010214680c157f302073b 100644 --- a/internal/tui/components/dialogs/permissions/permissions.go +++ b/internal/tui/components/dialogs/permissions/permissions.go @@ -69,13 +69,18 @@ type permissionDialogCmp struct { keyMap KeyMap } -func NewPermissionDialogCmp(permission permission.PermissionRequest) PermissionDialogCmp { +func NewPermissionDialogCmp(permission permission.PermissionRequest, opts *Options) PermissionDialogCmp { + if opts == nil { + opts = &Options{} + } + // Create viewport for content contentViewport := viewport.New() return &permissionDialogCmp{ contentViewPort: contentViewport, selectedOption: 0, // Default to "Allow" permission: permission, + diffSplitMode: opts.isSplitMode(), keyMap: DefaultKeyMap(), contentDirty: true, // Mark as dirty initially } @@ -643,9 +648,8 @@ func (p *permissionDialogCmp) generateDefaultContent() string { func (p *permissionDialogCmp) useDiffSplitMode() bool { if p.diffSplitMode != nil { return *p.diffSplitMode - } else { - return p.defaultDiffSplitMode } + return p.defaultDiffSplitMode } func (p *permissionDialogCmp) styleViewport() string { @@ -789,3 +793,24 @@ func (p *permissionDialogCmp) ID() dialogs.DialogID { func (p *permissionDialogCmp) Position() (int, int) { return p.positionRow, p.positionCol } + +// Options for create a new permission dialog +type Options struct { + DiffMode string // split or unified, empty means use defaultDiffSplitMode +} + +// isSplitMode returns internal representation of diff mode switch +func (o Options) isSplitMode() *bool { + var split bool + + switch o.DiffMode { + case "split": + split = true + case "unified": + split = false + default: + return nil + } + + return &split +} diff --git a/internal/tui/tui.go b/internal/tui/tui.go index bb865cc20c789a013b38c8f00d98cffed4f69db1..64aa86ea9633954a858fbd908cf8ea7fc0dce603 100644 --- a/internal/tui/tui.go +++ b/internal/tui/tui.go @@ -215,7 +215,9 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return a, cmd case pubsub.Event[permission.PermissionRequest]: return a, util.CmdHandler(dialogs.OpenDialogMsg{ - Model: permissions.NewPermissionDialogCmp(msg.Payload), + Model: permissions.NewPermissionDialogCmp(msg.Payload, &permissions.Options{ + DiffMode: config.Get().Options.TUI.DiffMode, + }), }) case permissions.PermissionResponseMsg: switch msg.Action { diff --git a/schema.json b/schema.json index 43e12da906318fda31f00f6c1d3b4c49b02be94f..6fbc23e81cbf81ff88497ca432af8720d1830e1f 100644 --- a/schema.json +++ b/schema.json @@ -387,6 +387,14 @@ "type": "boolean", "description": "Enable compact mode for the TUI interface", "default": false + }, + "diff_mode": { + "type": "string", + "enum": [ + "unified", + "split" + ], + "description": "Diff mode for the TUI interface" } }, "additionalProperties": false,