~sircmpwn/aerc

Make commands join args with spaces v1 PROPOSED

Jeffas: 1
 Make commands join args with spaces

 9 files changed, 60 insertions(+), 66 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~sircmpwn/aerc/patches/8315/mbox | git am -3
Learn more about email & git

[PATCH] Make commands join args with spaces Export this patch

This patch ensures the following commands join their arguments with
spaces to make it easier to interact with:

- cf
- mkdir
- cd
- attach
- detach
- ct
- copy
- move
- save
---
 commands/account/cf.go     | 10 ++++------
 commands/account/mkdir.go  |  5 +++--
 commands/cd.go             | 16 +++++-----------
 commands/compose/attach.go | 11 ++++-------
 commands/compose/detach.go | 10 +++-------
 commands/ct.go             | 16 +++++++++-------
 commands/msg/copy.go       | 28 +++++++++++++++-------------
 commands/msg/move.go       | 12 +++++++-----
 commands/msgview/save.go   | 18 ++++++++++--------
 9 files changed, 60 insertions(+), 66 deletions(-)

diff --git a/commands/account/cf.go b/commands/account/cf.go
index cbef308..65b8810 100644
--- a/commands/account/cf.go
+++ b/commands/account/cf.go
@@ -28,7 +28,7 @@ func (ChangeFolder) Complete(aerc *widgets.Aerc, args []string) []string {
}

func (ChangeFolder) Execute(aerc *widgets.Aerc, args []string) error {
	if len(args) < 2 {
	if len(args) == 1 {
		return errors.New("Usage: cf <folder>")
	}
	acct := aerc.SelectedAccount()
@@ -36,17 +36,15 @@ func (ChangeFolder) Execute(aerc *widgets.Aerc, args []string) error {
		return errors.New("No account selected")
	}
	previous := acct.Directories().Selected()
	if args[1] == "-" {
	joinedArgs := strings.Join(args[1:], " ")
	if joinedArgs == "-" {
		if dir, ok := history[acct.Name()]; ok {
			acct.Directories().Select(dir)
		} else {
			return errors.New("No previous folder to return to")
		}
	} else {
		if len(args) > 2 {
			args[1] = strings.Join(args[1:], " ")
		}
		acct.Directories().Select(args[1])
		acct.Directories().Select(joinedArgs)
	}
	history[acct.Name()] = previous

diff --git a/commands/account/mkdir.go b/commands/account/mkdir.go
index d42928e..bb7e38a 100644
--- a/commands/account/mkdir.go
+++ b/commands/account/mkdir.go
@@ -2,6 +2,7 @@ package account

import (
	"errors"
	"strings"
	"time"

	"github.com/gdamore/tcell"
@@ -25,14 +26,14 @@ func (MakeDir) Complete(aerc *widgets.Aerc, args []string) []string {
}

func (MakeDir) Execute(aerc *widgets.Aerc, args []string) error {
	if len(args) != 2 {
	if len(args) == 0 {
		return errors.New("Usage: :mkdir <name>")
	}
	acct := aerc.SelectedAccount()
	if acct == nil {
		return errors.New("No account selected")
	}
	name := args[1]
	name := strings.Join(args[1:], " ")
	acct.Worker().PostAction(&types.CreateDirectory{
		Directory: name,
	}, func(msg types.WorkerMessage) {
diff --git a/commands/cd.go b/commands/cd.go
index 1d033e4..fa487e7 100644
--- a/commands/cd.go
+++ b/commands/cd.go
@@ -24,11 +24,7 @@ func (ChangeDirectory) Aliases() []string {
}

func (ChangeDirectory) Complete(aerc *widgets.Aerc, args []string) []string {
	path := ""
	if len(args) >= 1 {
		path = args[0]
	}

	path := strings.Join(args, " ")
	completions := CompletePath(path)

	var dirs []string
@@ -43,24 +39,22 @@ func (ChangeDirectory) Complete(aerc *widgets.Aerc, args []string) []string {
}

func (ChangeDirectory) Execute(aerc *widgets.Aerc, args []string) error {
	if len(args) < 1 || len(args) > 2 {
	if len(args) < 1 {
		return errors.New("Usage: cd [directory]")
	}
	cwd, err := os.Getwd()
	if err != nil {
		return err
	}
	var target string
	if len(args) == 1 {
	target := strings.Join(args[1:], " ")
	if target == "" {
		target = "~"
	} else if args[1] == "-" {
	} else if target == "-" {
		if previousDir == "" {
			return errors.New("No previous folder to return to")
		} else {
			target = previousDir
		}
	} else {
		target = args[1]
	}
	target, err = homedir.Expand(target)
	if err != nil {
diff --git a/commands/compose/attach.go b/commands/compose/attach.go
index 969d12e..2b633dc 100644
--- a/commands/compose/attach.go
+++ b/commands/compose/attach.go
@@ -3,6 +3,7 @@ package compose
import (
	"fmt"
	"os"
	"strings"
	"time"

	"git.sr.ht/~sircmpwn/aerc/commands"
@@ -22,20 +23,16 @@ func (Attach) Aliases() []string {
}

func (Attach) Complete(aerc *widgets.Aerc, args []string) []string {
	path := ""
	if len(args) >= 1 {
		path = args[0]
	}

	path := strings.Join(args, " ")
	return commands.CompletePath(path)
}

func (Attach) Execute(aerc *widgets.Aerc, args []string) error {
	if len(args) != 2 {
	if len(args) == 1 {
		return fmt.Errorf("Usage: :attach <path>")
	}

	path := args[1]
	path := strings.Join(args[1:], " ")

	path, err := homedir.Expand(path)
	if err != nil {
diff --git a/commands/compose/detach.go b/commands/compose/detach.go
index dc70ff9..e8b07ed 100644
--- a/commands/compose/detach.go
+++ b/commands/compose/detach.go
@@ -2,6 +2,7 @@ package compose

import (
	"fmt"
	"strings"
	"time"

	"git.sr.ht/~sircmpwn/aerc/widgets"
@@ -20,7 +21,6 @@ func (Detach) Aliases() []string {

func (Detach) Complete(aerc *widgets.Aerc, args []string) []string {
	composer, _ := aerc.SelectedTab().(*widgets.Composer)

	return composer.GetAttachments()
}

@@ -28,12 +28,8 @@ func (Detach) Execute(aerc *widgets.Aerc, args []string) error {
	var path string
	composer, _ := aerc.SelectedTab().(*widgets.Composer)

	if len(args) > 2 {
		return fmt.Errorf("Usage: :detach [path]")
	}

	if len(args) == 2 {
		path = args[1]
	if len(args) > 1 {
		path = strings.Join(args[1:], " ")
	} else {
		// if no attachment is specified, delete the first in the list
		atts := composer.GetAttachments()
diff --git a/commands/ct.go b/commands/ct.go
index 3cae0bd..8b6e8a8 100644
--- a/commands/ct.go
+++ b/commands/ct.go
@@ -23,9 +23,10 @@ func (ChangeTab) Complete(aerc *widgets.Aerc, args []string) []string {
	if len(args) == 0 {
		return aerc.TabNames()
	}
	joinedArgs := strings.Join(args, " ")
	out := make([]string, 0)
	for _, tab := range aerc.TabNames() {
		if strings.HasPrefix(tab, args[0]) {
		if strings.HasPrefix(tab, joinedArgs) {
			out = append(out, tab)
		}
	}
@@ -33,22 +34,23 @@ func (ChangeTab) Complete(aerc *widgets.Aerc, args []string) []string {
}

func (ChangeTab) Execute(aerc *widgets.Aerc, args []string) error {
	if len(args) != 2 {
	if len(args) == 1 {
		return fmt.Errorf("Usage: %s <tab>", args[0])
	}
	if args[1] == "-" {
	joinedArgs := strings.Join(args[1:], " ")
	if joinedArgs == "-" {
		ok := aerc.SelectPreviousTab()
		if !ok {
			return errors.New("No previous tab to return to")
		}
	} else {
		n, err := strconv.Atoi(args[1])
		n, err := strconv.Atoi(joinedArgs)
		if err == nil {
			if strings.HasPrefix(args[1], "+") {
			if strings.HasPrefix(joinedArgs, "+") {
				for ; n > 0; n-- {
					aerc.NextTab()
				}
			} else if strings.HasPrefix(args[1], "-") {
			} else if strings.HasPrefix(joinedArgs, "-") {
				for ; n < 0; n++ {
					aerc.PrevTab()
				}
@@ -60,7 +62,7 @@ func (ChangeTab) Execute(aerc *widgets.Aerc, args []string) error {
				}
			}
		} else {
			ok := aerc.SelectTab(args[1])
			ok := aerc.SelectTab(joinedArgs)
			if !ok {
				return errors.New("No tab with that name")
			}
diff --git a/commands/msg/copy.go b/commands/msg/copy.go
index d6b78d3..48b296c 100644
--- a/commands/msg/copy.go
+++ b/commands/msg/copy.go
@@ -2,6 +2,7 @@ package msg

import (
	"errors"
	"strings"
	"time"

	"git.sr.ht/~sircmpwn/getopt"
@@ -27,13 +28,13 @@ func (Copy) Complete(aerc *widgets.Aerc, args []string) []string {
}

func (Copy) Execute(aerc *widgets.Aerc, args []string) error {
	if len(args) == 1 {
		return errors.New("Usage: cp [-p] <folder>")
	}
	opts, optind, err := getopt.Getopts(args, "p")
	if err != nil {
		return err
	}
	if optind != len(args)-1 {
		return errors.New("Usage: cp [-p] <folder>")
	}
	var (
		createParents bool
	)
@@ -53,16 +54,17 @@ func (Copy) Execute(aerc *widgets.Aerc, args []string) error {
	if err != nil {
		return err
	}
	store.Copy([]uint32{msg.Uid}, args[optind], createParents, func(
		msg types.WorkerMessage) {
	store.Copy([]uint32{msg.Uid}, strings.Join(args[optind:], " "),
		createParents, func(
			msg types.WorkerMessage) {

		switch msg := msg.(type) {
		case *types.Done:
			aerc.PushStatus("Messages copied.", 10*time.Second)
		case *types.Error:
			aerc.PushStatus(" "+msg.Error.Error(), 10*time.Second).
				Color(tcell.ColorDefault, tcell.ColorRed)
		}
	})
			switch msg := msg.(type) {
			case *types.Done:
				aerc.PushStatus("Messages copied.", 10*time.Second)
			case *types.Error:
				aerc.PushStatus(" "+msg.Error.Error(), 10*time.Second).
					Color(tcell.ColorDefault, tcell.ColorRed)
			}
		})
	return nil
}
diff --git a/commands/msg/move.go b/commands/msg/move.go
index 2f8c61e..d7e1ea9 100644
--- a/commands/msg/move.go
+++ b/commands/msg/move.go
@@ -2,6 +2,7 @@ package msg

import (
	"errors"
	"strings"
	"time"

	"git.sr.ht/~sircmpwn/getopt"
@@ -27,13 +28,13 @@ func (Move) Complete(aerc *widgets.Aerc, args []string) []string {
}

func (Move) Execute(aerc *widgets.Aerc, args []string) error {
	if len(args) == 1 {
		return errors.New("Usage: mv [-p] <folder>")
	}
	opts, optind, err := getopt.Getopts(args, "p")
	if err != nil {
		return err
	}
	if optind != len(args)-1 {
		return errors.New("Usage: mv [-p] <folder>")
	}
	var (
		createParents bool
	)
@@ -63,12 +64,13 @@ func (Move) Execute(aerc *widgets.Aerc, args []string) error {
	}
	store.Next()
	acct.Messages().Scroll()
	store.Move([]uint32{msg.Uid}, args[optind], createParents, func(
	joinedArgs := strings.Join(args[optind:], " ")
	store.Move([]uint32{msg.Uid}, joinedArgs, createParents, func(
		msg types.WorkerMessage) {

		switch msg := msg.(type) {
		case *types.Done:
			aerc.PushStatus("Message moved to "+args[optind], 10*time.Second)
			aerc.PushStatus("Message moved to "+joinedArgs, 10*time.Second)
		case *types.Error:
			aerc.PushStatus(" "+msg.Error.Error(), 10*time.Second).
				Color(tcell.ColorDefault, tcell.ColorRed)
diff --git a/commands/msgview/save.go b/commands/msgview/save.go
index 3b38ec7..33cd45f 100644
--- a/commands/msgview/save.go
+++ b/commands/msgview/save.go
@@ -11,9 +11,11 @@ import (
	"strings"
	"time"

	"git.sr.ht/~sircmpwn/aerc/widgets"
	"git.sr.ht/~sircmpwn/getopt"
	"github.com/mitchellh/go-homedir"

	"git.sr.ht/~sircmpwn/aerc/commands"
	"git.sr.ht/~sircmpwn/aerc/widgets"
)

type Save struct{}
@@ -27,10 +29,14 @@ func (Save) Aliases() []string {
}

func (Save) Complete(aerc *widgets.Aerc, args []string) []string {
	return nil
	path := strings.Join(args, " ")
	return commands.CompletePath(path)
}

func (Save) Execute(aerc *widgets.Aerc, args []string) error {
	if len(args) == 1 {
		return errors.New("Usage: :save [-p] <path>")
	}
	opts, optind, err := getopt.Getopts(args, "p")
	if err != nil {
		return err
@@ -38,7 +44,7 @@ func (Save) Execute(aerc *widgets.Aerc, args []string) error {

	var (
		mkdirs bool
		path   string
		path   string = strings.Join(args[optind:], " ")
	)

	for _, opt := range opts {
@@ -47,12 +53,8 @@ func (Save) Execute(aerc *widgets.Aerc, args []string) error {
			mkdirs = true
		}
	}
	if len(args) == optind+1 {
		path = args[optind]
	} else if defaultPath := aerc.Config().General.DefaultSavePath; defaultPath != "" {
	if defaultPath := aerc.Config().General.DefaultSavePath; defaultPath != "" {
		path = defaultPath
	} else {
		return errors.New("Usage: :save [-p] <path>")
	}

	mv := aerc.SelectedTab().(*widgets.MessageViewer)
--
2.23.0
Thanks!

To git.sr.ht:~sircmpwn/aerc
   3ec9fd2..043a02d  master -> master
View this thread in the archives