aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 e15afbe9..771c528e 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 40265f93..89189d52 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.