about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorNicolai Dagestad <nicolai@dagestad.fr>2020-08-01 14:25:13 +0200
committerReto Brunner <reto@labrat.space>2020-08-03 06:30:28 +0200
commit548a5fff68a648a5e0b6fd909e3c21463addc8af (patch)
tree3051b499fe24c374e70723f6dd5d5a2c91dc7e27
parent3d784c5d8c7d037e38159fc1753773a2e81aa43e (diff)
downloadaerc-548a5fff68a648a5e0b6fd909e3c21463addc8af.tar.gz
Set environment variables for the exec command
-rw-r--r--commands/exec.go16
-rw-r--r--doc/aerc.1.scd4
2 files changed, 19 insertions, 1 deletions
diff --git a/commands/exec.go b/commands/exec.go
index e15afbe..771c528 100644
--- a/commands/exec.go
+++ b/commands/exec.go
@@ -3,6 +3,7 @@ package commands
 import (
 	"errors"
 	"fmt"
+	"os"
 	"os/exec"
 	"time"
 
@@ -29,7 +30,22 @@ func (ExecCmd) Execute(aerc *widgets.Aerc, args []string) error {
 	if len(args) < 2 {
 		return errors.New("Usage: exec [cmd...]")
 	}
+
 	cmd := exec.Command(args[1], args[2:]...)
+	env := os.Environ()
+
+	switch view := aerc.SelectedTab().(type) {
+	case *widgets.AccountView:
+		env = append(env, fmt.Sprintf("account=%s", view.AccountConfig().Name))
+		env = append(env, fmt.Sprintf("folder=%s", view.Directories().Selected()))
+	case *widgets.MessageViewer:
+		acct := view.SelectedAccount()
+		env = append(env, fmt.Sprintf("account=%s", acct.AccountConfig().Name))
+		env = append(env, fmt.Sprintf("folder=%s", acct.Directories().Selected()))
+	}
+
+	cmd.Env = env
+
 	go func() {
 		err := cmd.Run()
 		if err != nil {
diff --git a/doc/aerc.1.scd b/doc/aerc.1.scd
index 40265f9..89189d5 100644
--- a/doc/aerc.1.scd
+++ b/doc/aerc.1.scd
@@ -47,7 +47,9 @@ These commands work in any context.
 	as a delta from the selected tab.
 
 *exec* <command...>
-	Executes an arbitrary command in the background.
+	Executes an arbitrary command in the background. Aerc will set the 
+	environement variables *$account* and *$folder* when the command is
+	executed from an Account tab or an opened message.
 
 	*Note*: commands executed in this way are not executed with the shell.