From 8126d82956636a2525263e2d0d985d721fdb8074 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 21 Mar 2019 16:30:23 -0400 Subject: Add context-specific commands --- commands/commands.go | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) (limited to 'commands/commands.go') diff --git a/commands/commands.go b/commands/commands.go index 2890cdd..a2589f8 100644 --- a/commands/commands.go +++ b/commands/commands.go @@ -10,18 +10,32 @@ import ( type AercCommand func(aerc *widgets.Aerc, args []string) error -var ( - commands map[string]AercCommand -) +type Commands map[string]AercCommand -func Register(name string, cmd AercCommand) { - if commands == nil { - commands = make(map[string]AercCommand) - } - commands[name] = cmd +func NewCommands() *Commands { + cmds := Commands(make(map[string]AercCommand)) + return &cmds +} + +func (cmds *Commands) dict() map[string]AercCommand { + return map[string]AercCommand(*cmds) +} + +func (cmds *Commands) Register(name string, cmd AercCommand) { + cmds.dict()[name] = cmd +} + +type NoSuchCommand string + +func (err NoSuchCommand) Error() string { + return "Unknown command " + string(err) +} + +type CommandSource interface { + Commands() *Commands } -func ExecuteCommand(aerc *widgets.Aerc, cmd string) error { +func (cmds *Commands) ExecuteCommand(aerc *widgets.Aerc, cmd string) error { args, err := shlex.Split(cmd) if err != nil { return err @@ -29,8 +43,8 @@ func ExecuteCommand(aerc *widgets.Aerc, cmd string) error { if len(args) == 0 { return errors.New("Expected a command.") } - if fn, ok := commands[args[0]]; ok { + if fn, ok := cmds.dict()[args[0]]; ok { return fn(aerc, args) } - return errors.New("Unknown command " + args[0]) + return NoSuchCommand(args[0]) } -- cgit v1.2.3