Skip to content

Commit eb2dfa1

Browse files
nikola2501dlvhdr
authored andcommitted
feat: add copy selected file path
1 parent 2ca04b3 commit eb2dfa1

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

pkg/ui/keys.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ type KeyMap struct {
1010
ToggleFileTree key.Binding
1111
Search key.Binding
1212
Quit key.Binding
13+
Copy key.Binding
1314
}
1415

1516
var keys = &KeyMap{
@@ -41,8 +42,21 @@ var keys = &KeyMap{
4142
key.WithKeys("q", "ctrl+c"),
4243
key.WithHelp("q", "quit"),
4344
),
45+
Copy: key.NewBinding(
46+
key.WithKeys("c"),
47+
key.WithHelp("c", "copy file path"),
48+
),
4449
}
4550

4651
func getKeys() []key.Binding {
47-
return []key.Binding{keys.Up, keys.Down, keys.CtrlD, keys.CtrlU, keys.ToggleFileTree, keys.Search, keys.Quit}
52+
return []key.Binding{
53+
keys.Up,
54+
keys.Down,
55+
keys.CtrlD,
56+
keys.CtrlU,
57+
keys.ToggleFileTree,
58+
keys.Search,
59+
keys.Copy,
60+
keys.Quit,
61+
}
4862
}

pkg/ui/mainModel.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ func (m mainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
115115
cmd = m.setCursor(m.cursor + 1)
116116
cmds = append(cmds, cmd)
117117
}
118+
case "c":
119+
cmd = m.copySelectedFilePath()
120+
if cmd != nil {
121+
cmds = append(cmds, cmd)
122+
}
118123
}
119124

120125
case tea.WindowSizeMsg:
@@ -313,3 +318,8 @@ func (m *mainModel) setCursor(cursor int) tea.Cmd {
313318
m.fileTree = m.fileTree.SetCursor(m.cursor)
314319
return cmd
315320
}
321+
322+
func (m *mainModel) copySelectedFilePath() tea.Cmd {
323+
cmd := m.fileTree.CopyFilePath(m.cursor)
324+
return cmd
325+
}

pkg/ui/panes/filetree/filetree.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"path/filepath"
66
"strings"
77

8+
"github.com/atotto/clipboard"
89
"github.com/bluekeyes/go-gitdiff/gitdiff"
910
"github.com/charmbracelet/bubbles/viewport"
1011
tea "github.com/charmbracelet/bubbletea"
@@ -13,6 +14,7 @@ import (
1314

1415
"github.com/dlvhdr/diffnav/pkg/constants"
1516
"github.com/dlvhdr/diffnav/pkg/filenode"
17+
"github.com/dlvhdr/diffnav/pkg/ui/common"
1618
"github.com/dlvhdr/diffnav/pkg/utils"
1719
)
1820

@@ -44,6 +46,20 @@ func (m Model) SetCursor(cursor int) Model {
4446
return m
4547
}
4648

49+
func (m Model) CopyFilePath(cursor int) tea.Cmd {
50+
if len(m.files) == 0 {
51+
return nil
52+
}
53+
name := filenode.GetFileName(m.files[cursor])
54+
err := clipboard.WriteAll(name)
55+
if err != nil {
56+
return func() tea.Msg {
57+
return common.ErrMsg{Err: err}
58+
}
59+
}
60+
return nil
61+
}
62+
4763
const contextLines = 15
4864

4965
func (m *Model) scrollSelectedFileIntoView(t *tree.Tree) {

0 commit comments

Comments
 (0)