diff options
author | Daniel Milde <daniel@milde.cz> | 2022-10-22 22:28:02 +0200 |
---|---|---|
committer | Daniel Milde <daniel@milde.cz> | 2022-10-22 22:47:20 +0200 |
commit | 8296bb3017cafe1e7c2440b2e09f36b1972634f3 (patch) | |
tree | 4aab87f10baa7ad065d49f3d72c1efe96f1705ce | |
parent | d1c91d627e86b2f98a5bacf958f48e66ade97202 (diff) |
feat: open file or directory in external programv5.20.0
closes #131
-rw-r--r-- | tui/actions.go | 24 | ||||
-rw-r--r-- | tui/keys.go | 2 | ||||
-rw-r--r-- | tui/tui.go | 1 |
3 files changed, 27 insertions, 0 deletions
diff --git a/tui/actions.go b/tui/actions.go index 34ea59a..008e7a7 100644 --- a/tui/actions.go +++ b/tui/actions.go @@ -5,6 +5,7 @@ import ( "fmt" "io" "os" + "os/exec" "runtime" "runtime/debug" "strings" @@ -347,3 +348,26 @@ func (ui *UI) showInfo() { ui.pages.AddPage("info", flex, true, true) } + +func (ui *UI) openItem() { + row, column := ui.table.GetSelection() + selectedFile, ok := ui.table.GetCell(row, column).GetReference().(fs.Item) + if !ok || selectedFile == ui.currentDir.GetParent() { + return + } + + openBinary := "xdg-open" + + switch runtime.GOOS { + case "darwin": + openBinary = "open" + case "windows": + openBinary = "Invoke-Item" + } + + cmd := exec.Command(openBinary, selectedFile.GetPath()) + err := cmd.Start() + if err != nil { + ui.showErr("Error opening", err) + } +} diff --git a/tui/keys.go b/tui/keys.go index d038f7e..2909b57 100644 --- a/tui/keys.go +++ b/tui/keys.go @@ -139,6 +139,8 @@ func (ui *UI) handleMainActions(key *tcell.EventKey) *tcell.EventKey { ui.handleDelete(true) case 'v': ui.showFile() + case 'o': + ui.openItem() case 'i': ui.showInfo() case 'a': @@ -32,6 +32,7 @@ Item under cursor: [::b]d [white:black:-]Delete file or directory [::b]e [white:black:-]Empty file or directory [::b]v [white:black:-]Show content of file + [::b]o [white:black:-]Open file or directory in external program [::b]i [white:black:-]Show info about item Sort by (twice toggles asc/desc): |