d371c1ac8d
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>
47 lines
961 B
Go
47 lines
961 B
Go
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)
|
|
}
|
|
}
|