summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Milde <daniel@milde.cz>2022-10-22 22:28:02 +0200
committerDaniel Milde <daniel@milde.cz>2022-10-22 22:47:20 +0200
commit8296bb3017cafe1e7c2440b2e09f36b1972634f3 (patch)
tree4aab87f10baa7ad065d49f3d72c1efe96f1705ce
parentd1c91d627e86b2f98a5bacf958f48e66ade97202 (diff)
feat: open file or directory in external programv5.20.0
closes #131
-rw-r--r--tui/actions.go24
-rw-r--r--tui/keys.go2
-rw-r--r--tui/tui.go1
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':
diff --git a/tui/tui.go b/tui/tui.go
index 79dda14..6e88a33 100644
--- a/tui/tui.go
+++ b/tui/tui.go
@@ -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):