Set environment variables for the exec command

This commit is contained in:
Nicolai Dagestad 2020-08-01 14:25:13 +02:00 committed by Reto Brunner
parent 3d784c5d8c
commit 548a5fff68
2 changed files with 19 additions and 1 deletions

View file

@ -3,6 +3,7 @@ package commands
import ( import (
"errors" "errors"
"fmt" "fmt"
"os"
"os/exec" "os/exec"
"time" "time"
@ -29,7 +30,22 @@ func (ExecCmd) Execute(aerc *widgets.Aerc, args []string) error {
if len(args) < 2 { if len(args) < 2 {
return errors.New("Usage: exec [cmd...]") return errors.New("Usage: exec [cmd...]")
} }
cmd := exec.Command(args[1], args[2:]...) 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() { go func() {
err := cmd.Run() err := cmd.Run()
if err != nil { if err != nil {

View file

@ -47,7 +47,9 @@ These commands work in any context.
as a delta from the selected tab. as a delta from the selected tab.
*exec* <command...> *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. *Note*: commands executed in this way are not executed with the shell.