commands: add switch-account command for composer

Switch accounts when in the composer mode. When switching accounts, the
From header, the crypto status and the address completer will be
updated.

Accounts can be switched with :switch-account <account-name>. The
completions for the switch-account command will list the available
accounts. If switch-account is run without arguments, the current
account name with the correct usage is displayed.

Fixes: https://todo.sr.ht/~rjarry/aerc/72
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
This commit is contained in:
Koni Marti 2022-08-15 21:58:43 +02:00 committed by Robin Jarry
parent ee4f2ea49d
commit d371c1ac8d
2 changed files with 51 additions and 0 deletions
commands/compose

View file

@ -0,0 +1,47 @@
package compose
import (
"errors"
"fmt"
"git.sr.ht/~rjarry/aerc/widgets"
)
type AccountSwitcher interface {
SwitchAccount(*widgets.AccountView) error
}
type SwitchAccount struct{}
func init() {
register(SwitchAccount{})
}
func (SwitchAccount) Aliases() []string {
return []string{"switch-account"}
}
func (SwitchAccount) Complete(aerc *widgets.Aerc, args []string) []string {
return aerc.AccountNames()
}
func (SwitchAccount) Execute(aerc *widgets.Aerc, args []string) error {
if len(args) != 2 {
name := ""
if acct := aerc.SelectedAccount(); acct != nil {
name = fmt.Sprintf("Current account: %s. ", acct.Name())
}
return errors.New(name + "Usage: switch-account <account-name>")
}
switcher, ok := aerc.SelectedTabContent().(AccountSwitcher)
if !ok {
return errors.New("this tab cannot switch accounts")
}
if acct, err := aerc.Account(args[1]); err != nil {
return err
} else {
return switcher.SwitchAccount(acct)
}
}