Skip to content

Commit 4f23aff

Browse files
authored
Merge pull request #2 from Amolith/parse-editor-with-args
fix(tui): support editor commands with arguments
2 parents 820d500 + 12c2ec2 commit 4f23aff

File tree

3 files changed

+29
-11
lines changed

3 files changed

+29
-11
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ require (
77
github.com/charmbracelet/bubbletea v0.26.0
88
github.com/charmbracelet/lipgloss v0.11.0
99
gopkg.in/yaml.v3 v3.0.1
10+
mvdan.cc/sh/v3 v3.7.0
1011
)
1112

1213
require (

go.sum

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ github.com/charmbracelet/x/ansi v0.1.1 h1:CGAduulr6egay/YVbGc8Hsu8deMg1xZ/bkaXTP
1212
github.com/charmbracelet/x/ansi v0.1.1/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
1313
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
1414
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
15+
github.com/frankban/quicktest v1.14.5 h1:dfYrrRyLtiqT9GyKXgdh+k4inNeTvmGbuSgZ3lx3GhA=
16+
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
17+
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
18+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
1519
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
1620
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
1721
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
@@ -33,6 +37,7 @@ github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ
3337
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
3438
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
3539
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
40+
github.com/rogpeppe/go-internal v1.10.1-0.20230524175051-ec119421bb97 h1:3RPlVWzZ/PDqmVuf/FKHARG5EMid/tl7cv54Sw/QRVY=
3641
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
3742
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
3843
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -47,3 +52,5 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+
4752
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
4853
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
4954
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
55+
mvdan.cc/sh/v3 v3.7.0 h1:lSTjdP/1xsddtaKfGg7Myu7DnlHItd3/M2tomOcNNBg=
56+
mvdan.cc/sh/v3 v3.7.0/go.mod h1:K2gwkaesF/D7av7Kxl0HbF5kGOd2ArupNTX3X44+8l8=

internal/tui/update.go

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)