aerc/commands/account/split.go
Tim Culverhouse 7585a54832 split: prevent panic when store is not set
Prevent panic when split is called but the msgstore is either not
initialized or has no UIDs. This condition could be triggered by calling
:split or :vsplit immediately at startup.

Use the same logic as the :view command, which could operate in a
similar manner.

Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
Acked-by: Robin Jarry <robin@jarry.cc>
2022-10-19 23:52:39 +02:00

64 lines
1.2 KiB
Go

package account
import (
"errors"
"strconv"
"strings"
"git.sr.ht/~rjarry/aerc/widgets"
)
type Split struct{}
func init() {
register(Split{})
}
func (Split) Aliases() []string {
return []string{"split", "vsplit"}
}
func (Split) Complete(aerc *widgets.Aerc, args []string) []string {
return nil
}
func (Split) Execute(aerc *widgets.Aerc, args []string) error {
if len(args) > 2 {
return errors.New("Usage: [v]split n")
}
acct := aerc.SelectedAccount()
if acct == nil {
return errors.New("No account selected")
}
if acct.Messages().Empty() {
return nil
}
n := 0
var err error
if len(args) > 1 {
delta := false
if strings.HasPrefix(args[1], "+") || strings.HasPrefix(args[1], "-") {
delta = true
}
n, err = strconv.Atoi(args[1])
if err != nil {
return errors.New("Usage: [v]split n")
}
if delta {
n = acct.SplitSize() + n
// Maintain split direction when using deltas
if acct.SplitSize() > 0 {
args[0] = acct.SplitDirection()
}
}
}
if n == acct.SplitSize() {
// Repeated commands of the same size have the effect of
// toggling the split
n = 0
}
if args[0] == "split" {
return acct.Split(n)
}
return acct.Vsplit(n)
}