on main help sign in
feat(config): allow configure the default diff mode (#454)
df23e9abbrodriges
internal/config/config.go+2−1
@@ -123,7 +123,8 @@ type LSPConfig struct {
123}
123}
124
124
125type TUIOptions struct {
125type 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"`
127 // Here we can add themes later or any TUI related options
128 // Here we can add themes later or any TUI related options
128}
129}
129
130
internal/tui/components/dialogs/permissions/permissions.go+28−3
@@ -69,13 +69,18 @@ type permissionDialogCmp struct {
69 keyMap KeyMap
69 keyMap KeyMap
70}
70}
71
71
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+
73 // Create viewport for content
77 // Create viewport for content
74 contentViewport := viewport.New()
78 contentViewport := viewport.New()
75 return &permissionDialogCmp{
79 return &permissionDialogCmp{
76 contentViewPort: contentViewport,
80 contentViewPort: contentViewport,
77 selectedOption: 0, // Default to "Allow"
81 selectedOption: 0, // Default to "Allow"
78 permission: permission,
82 permission: permission,
83+ diffSplitMode: opts.isSplitMode(),
79 keyMap: DefaultKeyMap(),
84 keyMap: DefaultKeyMap(),
80 contentDirty: true, // Mark as dirty initially
85 contentDirty: true, // Mark as dirty initially
81 }
86 }
@@ -643,9 +648,8 @@ func (p *permissionDialogCmp) generateDefaultContent() string {
643func (p *permissionDialogCmp) useDiffSplitMode() bool {
648func (p *permissionDialogCmp) useDiffSplitMode() bool {
644 if p.diffSplitMode != nil {
649 if p.diffSplitMode != nil {
645 return *p.diffSplitMode
650 return *p.diffSplitMode
646− } else {
647− return p.defaultDiffSplitMode
648 }
651 }
652+ return p.defaultDiffSplitMode
649}
653}
650
654
651func (p *permissionDialogCmp) styleViewport() string {
655func (p *permissionDialogCmp) styleViewport() string {
@@ -789,3 +793,24 @@ func (p *permissionDialogCmp) ID() dialogs.DialogID {
789func (p *permissionDialogCmp) Position() (int, int) {
793func (p *permissionDialogCmp) Position() (int, int) {
790 return p.positionRow, p.positionCol
794 return p.positionRow, p.positionCol
791}
795}
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) {
215 return a, cmd
215 return a, cmd
216 case pubsub.Event[permission.PermissionRequest]:
216 case pubsub.Event[permission.PermissionRequest]:
217 return a, util.CmdHandler(dialogs.OpenDialogMsg{
217 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+ }),
219 })
221 })
220 case permissions.PermissionResponseMsg:
222 case permissions.PermissionResponseMsg:
221 switch msg.Action {
223 switch msg.Action {
schema.json+8
@@ -387,6 +387,14 @@
387 "type": "boolean",
387 "type": "boolean",
388 "description": "Enable compact mode for the TUI interface",
388 "description": "Enable compact mode for the TUI interface",
389 "default": false
389 "default": false
390+ },
391+ "diff_mode": {
392+ "type": "string",
393+ "enum": [
394+ "unified",
395+ "split"
396+ ],
397+ "description": "Diff mode for the TUI interface"
390 }
398 }
391 },
399 },
392 "additionalProperties": false,
400 "additionalProperties": false,