diff options
author | Ray Ganardi <ray@ganardi.xyz> | 2020-04-24 11:36:16 +0200 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2020-04-24 12:59:21 -0400 |
commit | 447e662057c663f47f5c8a490543b1a52b26bc86 (patch) | |
tree | 6c44b7234a43b0da25bb448b93bfca8014d864a6 /commands/choose.go | |
parent | acf69b7490f4848066f2df4b3c2f675a8d57661a (diff) | |
download | aerc-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/choose.go')
-rw-r--r-- | commands/choose.go | 48 |
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) +} |