From f0a0c5aa733fa66958c113465bfc5fdd3d7cc9f0 Mon Sep 17 00:00:00 2001 From: Aditya Srivastava Date: Sun, 11 Aug 2019 20:42:49 -0700 Subject: add close command at global level --- commands/close.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 commands/close.go (limited to 'commands/close.go') diff --git a/commands/close.go b/commands/close.go new file mode 100644 index 0000000..c885ee9 --- /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") + } +} -- cgit v1.2.3