add close command at global level

This commit is contained in:
Aditya Srivastava 2019-08-11 20:42:49 -07:00 committed by Drew DeVault
parent 72204d1f24
commit f0a0c5aa73
6 changed files with 72 additions and 100 deletions

59
commands/close.go Normal file
View file

@ -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")
}
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -41,6 +41,10 @@ These commands work in any context.
it's treated as an index. If + or - is specified, the number is interpreted it's treated as an index. If + or - is specified, the number is interpreted
as a delta from the selected tab. as a delta from the selected tab.
*close* [tab name]
Closes current tab if no tab name provided, or tab with tab name if
argument is provided. Cannot close account tabs.
*exec* <command...> *exec* <command...>
Executes an arbitrary command in the background. Executes an arbitrary command in the background.
@ -184,9 +188,6 @@ message list, the message in the message viewer, etc).
## MESSAGE VIEW COMMANDS ## MESSAGE VIEW COMMANDS
*close*
Closes the message viewer.
*next* <n>[%], *prev* <n>[%] *next* <n>[%], *prev* <n>[%]
Selects the next (or previous) message in the message list. If specified as Selects the next (or previous) message in the message list. If specified as
a percentage, the percentage is applied to the number of messages shown on a percentage, the percentage is applied to the number of messages shown on
@ -246,9 +247,6 @@ message list, the message in the message viewer, etc).
## TERMINAL COMMANDS ## TERMINAL COMMANDS
*close*
Closes the terminal.
# LOGGING # LOGGING
Aerc does not log by default, but collecting log output can be useful for Aerc does not log by default, but collecting log output can be useful for

View file

@ -244,6 +244,14 @@ func (aerc *Aerc) SelectedTab() ui.Drawable {
return aerc.tabs.Tabs[aerc.tabs.Selected].Content return aerc.tabs.Tabs[aerc.tabs.Selected].Content
} }
func (aerc *Aerc) SelectedTabName() string {
return aerc.tabs.Tabs[aerc.tabs.Selected].Name
}
func (aerc *Aerc) SelectedTabIndex() int {
return aerc.tabs.Selected
}
func (aerc *Aerc) NewTab(drawable ui.Drawable, name string) *ui.Tab { func (aerc *Aerc) NewTab(drawable ui.Drawable, name string) *ui.Tab {
tab := aerc.tabs.Add(drawable, name) tab := aerc.tabs.Add(drawable, name)
aerc.tabs.Select(len(aerc.tabs.Tabs) - 1) aerc.tabs.Select(len(aerc.tabs.Tabs) - 1)