@@ -4,11 +4,12 @@ import (
44 "fmt"
55 "os/exec"
66
7+ "github.com/Bharath-code/git-scope/internal/model"
8+ "github.com/Bharath-code/git-scope/internal/stats"
79 "github.com/charmbracelet/bubbles/spinner"
810 "github.com/charmbracelet/bubbles/textinput"
911 tea "github.com/charmbracelet/bubbletea"
10- "github.com/Bharath-code/git-scope/internal/model"
11- "github.com/Bharath-code/git-scope/internal/stats"
12+ "mvdan.cc/sh/v3/shell"
1213)
1314
1415// Update handles messages and updates the model
@@ -50,14 +51,21 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
5051 return m , nil
5152
5253 case openEditorMsg :
53- // Check if editor exists in PATH before trying to launch
54- _ , err := exec .LookPath (m .cfg .Editor )
54+ // Parse editor command (handles "editor --flag" style configs)
55+ fields , err := shell .Fields (m .cfg .Editor , nil )
56+ if err != nil || len (fields ) == 0 {
57+ m .statusMsg = fmt .Sprintf ("❌ Invalid editor command: '%s'" , m .cfg .Editor )
58+ return m , nil
59+ }
60+ // Check if editor binary exists in PATH
61+ _ , err = exec .LookPath (fields [0 ])
5562 if err != nil {
56- m .statusMsg = fmt .Sprintf ("❌ Editor '%s' not found. Press 'e' to change editor or install it first." , m . cfg . Editor )
63+ m .statusMsg = fmt .Sprintf ("❌ Editor '%s' not found. Press 'e' to change editor or install it first." , fields [ 0 ] )
5764 return m , nil
5865 }
59-
60- c := exec .Command (m .cfg .Editor , msg .path )
66+
67+ args := append (fields [1 :], msg .path )
68+ c := exec .Command (fields [0 ], args ... )
6169 return m , tea .ExecProcess (c , func (err error ) tea.Msg {
6270 if err != nil {
6371 return editorClosedMsg {err : err }
@@ -194,10 +202,12 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
194202
195203 case "e" :
196204 if m .state == StateReady {
197- // Check if editor exists
198- _ , err := exec .LookPath (m .cfg .Editor )
199- if err != nil {
200- m .statusMsg = fmt .Sprintf ("❌ Editor '%s' not found in PATH. Install it or edit ~/.config/git-scope/config.yml" , m .cfg .Editor )
205+ // Check if editor exists (parse command to get binary name)
206+ fields , err := shell .Fields (m .cfg .Editor , nil )
207+ if err != nil || len (fields ) == 0 {
208+ m .statusMsg = fmt .Sprintf ("❌ Invalid editor command: '%s'" , m .cfg .Editor )
209+ } else if _ , err := exec .LookPath (fields [0 ]); err != nil {
210+ m .statusMsg = fmt .Sprintf ("❌ Editor '%s' not found in PATH. Install it or edit ~/.config/git-scope/config.yml" , fields [0 ])
201211 } else {
202212 m .statusMsg = fmt .Sprintf ("✓ Editor: %s (edit config at ~/.config/git-scope/config.yml)" , m .cfg .Editor )
203213 }
0 commit comments