diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-03-21 16:30:23 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-03-21 16:30:23 -0400 |
commit | 8126d82956636a2525263e2d0d985d721fdb8074 (patch) | |
tree | 2c5f5c2e2fb2e5ecfb4c12eb8ef6bc575edc39f8 /aerc.go | |
parent | fe79a9a5879936a7f5b16cc6a8be1d93ec1bfae7 (diff) | |
download | aerc-8126d82956636a2525263e2d0d985d721fdb8074.tar.gz |
Add context-specific commands
Diffstat (limited to 'aerc.go')
-rw-r--r-- | aerc.go | 36 |
1 files changed, 31 insertions, 5 deletions
@@ -11,10 +11,23 @@ import ( "git.sr.ht/~sircmpwn/aerc2/config" "git.sr.ht/~sircmpwn/aerc2/commands" + "git.sr.ht/~sircmpwn/aerc2/commands/account" libui "git.sr.ht/~sircmpwn/aerc2/lib/ui" "git.sr.ht/~sircmpwn/aerc2/widgets" ) +func getCommands(selected libui.Drawable) []*commands.Commands { + switch selected.(type) { + case *widgets.AccountView: + return []*commands.Commands{ + commands.GlobalCommands, + account.AccountCommands, + } + default: + return []*commands.Commands{commands.GlobalCommands} + } +} + func main() { var ( logOut io.Writer @@ -38,12 +51,25 @@ func main() { ui *libui.UI ) aerc = widgets.NewAerc(conf, logger, func(cmd string) error { - err = commands.ExecuteCommand(aerc, cmd) - if _, ok := err.(commands.ErrorExit); ok { - ui.Exit = true - return nil + cmds := getCommands(aerc.SelectedTab()) + for i, set := range cmds { + err := set.ExecuteCommand(aerc, cmd) + if _, ok := err.(commands.NoSuchCommand); ok { + if i == len(cmds) - 1 { + return err + } else { + continue + } + } else if _, ok := err.(commands.ErrorExit); ok { + ui.Exit = true + return nil + } else if err != nil { + return err + } else { + break + } } - return err + return nil }) ui, err = libui.Initialize(conf, aerc) |