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 ++++++++++++++++++++++++++++++++++++++++++++++ commands/compose/abort.go | 33 -------------------------- commands/msgview/close.go | 30 ----------------------- commands/terminal/close.go | 30 ----------------------- 4 files changed, 59 insertions(+), 93 deletions(-) create mode 100644 commands/close.go delete mode 100644 commands/compose/abort.go delete mode 100644 commands/msgview/close.go delete mode 100644 commands/terminal/close.go (limited to 'commands') 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") + } +} diff --git a/commands/compose/abort.go b/commands/compose/abort.go deleted file mode 100644 index 4c121d7..0000000 --- a/commands/compose/abort.go +++ /dev/null @@ -1,33 +0,0 @@ -package compose - -import ( - "errors" - - "git.sr.ht/~sircmpwn/aerc/widgets" -) - -type Abort struct{} - -func init() { - register(Abort{}) -} - -func (_ Abort) Aliases() []string { - return []string{"abort"} -} - -func (_ Abort) Complete(aerc *widgets.Aerc, args []string) []string { - return nil -} - -func (_ Abort) Execute(aerc *widgets.Aerc, args []string) error { - if len(args) != 1 { - return errors.New("Usage: abort") - } - composer, _ := aerc.SelectedTab().(*widgets.Composer) - - aerc.RemoveTab(composer) - composer.Close() - - return nil -} diff --git a/commands/msgview/close.go b/commands/msgview/close.go deleted file mode 100644 index 6a7eb0a..0000000 --- a/commands/msgview/close.go +++ /dev/null @@ -1,30 +0,0 @@ -package msgview - -import ( - "errors" - - "git.sr.ht/~sircmpwn/aerc/widgets" -) - -type Close struct{} - -func init() { - register(Close{}) -} - -func (_ Close) Aliases() []string { - return []string{"close"} -} - -func (_ Close) Complete(aerc *widgets.Aerc, args []string) []string { - return nil -} - -func (_ Close) Execute(aerc *widgets.Aerc, args []string) error { - if len(args) != 1 { - return errors.New("Usage: close") - } - mv, _ := aerc.SelectedTab().(*widgets.MessageViewer) - aerc.RemoveTab(mv) - return nil -} diff --git a/commands/terminal/close.go b/commands/terminal/close.go deleted file mode 100644 index 8256e67..0000000 --- a/commands/terminal/close.go +++ /dev/null @@ -1,30 +0,0 @@ -package terminal - -import ( - "errors" - - "git.sr.ht/~sircmpwn/aerc/widgets" -) - -type Close struct{} - -func init() { - register(Close{}) -} - -func (_ Close) Aliases() []string { - return []string{"close"} -} - -func (_ Close) Complete(aerc *widgets.Aerc, args []string) []string { - return nil -} - -func (_ Close) Execute(aerc *widgets.Aerc, args []string) error { - if len(args) != 1 { - return errors.New("Usage: close") - } - term, _ := aerc.SelectedTab().(*widgets.Terminal) - term.Close(nil) - return nil -} -- cgit v1.2.3