diff options
Diffstat (limited to 'commands/close.go')
-rw-r--r-- | commands/close.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/commands/close.go b/commands/close.go new file mode 100644 index 00000000..c885ee9e --- /dev/null +++ b/commands/close.go @@ -0,0 +1,59 @@ +package commands + +import ( + "errors" + "fmt" + + "git.sr.ht/~sircmpwn/aerc/widgets" +) + +type Close struct{} + +func init() { + register(Close{}) +} + +func (_ Close) Aliases() []string { + return []string{"close", "abort"} +} + +func (_ Close) Complete(aerc *widgets.Aerc, args []string) []string { + return nil +} + +func (_ Close) Execute(aerc *widgets.Aerc, args []string) error { + if len(args) > 2 { + return errors.New("Usage: close [tab name]") + } else if len(args) == 1 { + return CloseTab(aerc, aerc.SelectedTabName()) + } else { + tabname := args[1] + for _, tab := range aerc.TabNames() { + if tab == tabname { + return CloseTab(aerc, tabname) + } + } + return errors.New(fmt.Sprintf("Tab %s not found", tabname)) + } + return nil +} + +func CloseTab(aerc *widgets.Aerc, tabname string) error { + curTabIndex := aerc.SelectedTabIndex() + aerc.SelectTab(tabname) + switch tab := aerc.SelectedTab().(type) { + default: + aerc.RemoveTab(tab) + return nil + case *widgets.Terminal: + tab.Close(nil) + return nil + case *widgets.Composer: + aerc.RemoveTab(tab) + tab.Close() + return nil + case *widgets.AccountView: + aerc.SelectTabIndex(curTabIndex) + return errors.New("Cannot close account tab") + } +} |