aboutsummaryrefslogtreecommitdiffstats
path: root/commands/account/split.go
diff options
context:
space:
mode:
Diffstat (limited to 'commands/account/split.go')
-rw-r--r--commands/account/split.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/commands/account/split.go b/commands/account/split.go
new file mode 100644
index 00000000..2b802256
--- /dev/null
+++ b/commands/account/split.go
@@ -0,0 +1,63 @@
+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")
+ }
+ 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" {
+ acct.Split(n)
+ return nil
+ }
+ acct.Vsplit(n)
+ return nil
+}