about summary refs log tree commit diff stats
path: root/commands
diff options
context:
space:
mode:
authorRay Ganardi <ray@ganardi.xyz>2020-04-24 11:36:16 +0200
committerDrew DeVault <sir@cmpwn.com>2020-04-24 12:59:21 -0400
commit447e662057c663f47f5c8a490543b1a52b26bc86 (patch)
tree6c44b7234a43b0da25bb448b93bfca8014d864a6 /commands
parentacf69b7490f4848066f2df4b3c2f675a8d57661a (diff)
downloadaerc-447e662057c663f47f5c8a490543b1a52b26bc86.tar.gz
Add :choose command
Usage:
	*choose* -o <key> <text> <command> [-o <key> <text> <command>]...

Prompts the user to choose from various options.
Diffstat (limited to 'commands')
-rw-r--r--commands/choose.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/commands/choose.go b/commands/choose.go
new file mode 100644
index 0000000..5bf36b1
--- /dev/null
+++ b/commands/choose.go
@@ -0,0 +1,48 @@
+package commands
+
+import (
+	"fmt"
+	"strings"
+
+	"git.sr.ht/~sircmpwn/aerc/widgets"
+)
+
+type Choose struct{}
+
+func init() {
+	register(Choose{})
+}
+
+func (Choose) Aliases() []string {
+	return []string{"choose"}
+}
+
+func (Choose) Complete(aerc *widgets.Aerc, args []string) []string {
+	return nil
+}
+
+func (Choose) Execute(aerc *widgets.Aerc, args []string) error {
+	if len(args) < 5 || len(args)%4 != 1 {
+		return chooseUsage(args[0])
+	}
+
+	choices := []widgets.Choice{}
+	for i := 0; i+4 < len(args); i+=4 {
+		if args[i+1] != "-o" {
+			return chooseUsage(args[0])
+		}
+		choices = append(choices, widgets.Choice{
+			Key:     args[i+2],
+			Text:    args[i+3],
+			Command: strings.Split(args[i+4], " "),
+		})
+	}
+
+	aerc.RegisterChoices(choices)
+
+	return nil
+}
+
+func chooseUsage(cmd string) error {
+	return fmt.Errorf("Usage: %s -o <key> <text> <command> [-o <key> <text> <command>]...", cmd)
+}