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

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

View file

@ -476,6 +476,10 @@ message list, the message in the message viewer, etc).
configuration. For details on configuring outgoing mail delivery consult configuration. For details on configuring outgoing mail delivery consult
*aerc-config*(5). *aerc-config*(5).
*switch-account* <account-name>
Switches the account. If run without arguments, the current account name
is displayed.
*header* [-f] <field> [value] *header* [-f] <field> [value]
Add a new email header. If the header already exists, -f must be Add a new email header. If the header already exists, -f must be
specified to replace the given value. specified to replace the given value.