aboutsummaryrefslogtreecommitdiffstats
path: root/browserenv.go
diff options
context:
space:
mode:
authorTeddy Wing2020-12-20 17:15:11 +0100
committerTeddy Wing2020-12-20 17:18:40 +0100
commit85df0594be312307ea33086583f590283f828c09 (patch)
tree2470ad8f5fde1abcba23eb4b321bcdba54c8f60e /browserenv.go
parent2b67d0904096d00fbfa4ca7e7ea82a4f51055b45 (diff)
downloadbrowserenv-85df0594be312307ea33086583f590283f828c09.tar.bz2
Support multiple colon-separated commands in `BROWSER`
After reading the `urlview` man page, I learned that it supports multiple commands in the `BROWSER` environment variable separated by colons. Read over the source to see what `urlview` does: https://github.com/sigpipe/urlview/blob/08767aa863cd27d1755ba0aff65b8cc1a0c1446a/urlview.c#L617-L630 It tries each command from left to right until one of them exits with a `0` exit code. Use the same logic here.
Diffstat (limited to 'browserenv.go')
-rw-r--r--browserenv.go20
1 files changed, 18 insertions, 2 deletions
diff --git a/browserenv.go b/browserenv.go
index f5a51ca..4edb032 100644
--- a/browserenv.go
+++ b/browserenv.go
@@ -17,6 +17,8 @@ var Stdout io.Writer = os.Stdout
var percentS = regexp.MustCompile("%s[[:^alpha:]]?")
+const commandSeparator = ":"
+
func OpenFile(path string) error {
envCommand := envBrowserCommand()
if envCommand != "" {
@@ -67,8 +69,22 @@ func envBrowserCommand() string {
}
// TODO
-func runBrowserCommand(command, url string) error {
- return browserCommand(command, url).Run()
+func runBrowserCommand(commands, url string) error {
+ commandList := strings.Split(commands, commandSeparator)
+
+ var err error
+ for _, command := range commandList {
+ cmd := browserCommand(command, url)
+
+ // Keep running commands from left to right until one of them exits
+ // successfully.
+ err = cmd.Run()
+ if err == nil || cmd.ProcessState.ExitCode() == 0 {
+ return err
+ }
+ }
+
+ return err
}
// TODO