~sircmpwn/aerc

Set environment variables for the exec command v1 PROPOSED

Nicolai Dagestad: 1
 Set environment variables for the exec command

 2 files changed, 19 insertions(+), 1 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~sircmpwn/aerc/patches/11832/mbox | git am -3
Learn more about email & git
View this thread in the archives

[PATCH] Set environment variables for the exec command Export this patch

---

I implemented it only for AccountView and MessageViewer as they were the only
context it which it made sens to me.
Feel free to suggest more variables, theese are just the one that I had a use 
for. 
 commands/exec.go | 16 ++++++++++++++++
 doc/aerc.1.scd   |  4 +++-
 2 files changed, 19 insertions(+), 1 deletion(-)

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.

-- 
2.28.0
Hi,
Merged to master, thanks.

On Sat, Aug 01, 2020 at 02:25:13PM +0200, Nicolai Dagestad wrote: