aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--commands/account/mkdir.go10
-rw-r--r--commands/account/recover.go2
-rw-r--r--commands/account/search.go6
-rw-r--r--commands/account/sort.go2
-rw-r--r--commands/commands.go18
-rw-r--r--commands/compose/detach.go2
-rw-r--r--commands/compose/header.go2
-rw-r--r--commands/compose/multipart.go2
-rw-r--r--commands/compose/send.go2
-rw-r--r--commands/compose/switch.go2
-rw-r--r--commands/ct.go2
-rw-r--r--commands/help.go2
-rw-r--r--commands/msg/archive.go2
-rw-r--r--commands/msg/read.go2
-rw-r--r--commands/msgview/open-link.go2
-rw-r--r--commands/prompt.go2
-rw-r--r--commands/util.go21
17 files changed, 45 insertions, 36 deletions
diff --git a/commands/account/mkdir.go b/commands/account/mkdir.go
index 3e546ace..af3d1045 100644
--- a/commands/account/mkdir.go
+++ b/commands/account/mkdir.go
@@ -7,6 +7,7 @@ import (
"git.sr.ht/~rjarry/aerc/app"
"git.sr.ht/~rjarry/aerc/commands"
"git.sr.ht/~rjarry/aerc/worker/types"
+ "git.sr.ht/~rjarry/go-opt"
)
type MakeDir struct {
@@ -26,10 +27,13 @@ func (*MakeDir) CompleteFolder(arg string) []string {
if acct == nil {
return nil
}
+ sep := app.SelectedAccount().Worker().PathSeparator()
return commands.FilterList(
- acct.Directories().List(), arg, "",
- app.SelectedAccount().Worker().PathSeparator(),
- app.SelectedAccountUiConfig().FuzzyComplete)
+ acct.Directories().List(), arg,
+ func(s string) string {
+ return opt.QuoteArg(s) + sep
+ },
+ )
}
func (m MakeDir) Execute(args []string) error {
diff --git a/commands/account/recover.go b/commands/account/recover.go
index cba6e0cb..a2170edd 100644
--- a/commands/account/recover.go
+++ b/commands/account/recover.go
@@ -39,7 +39,7 @@ func (*Recover) CompleteFile(arg string) []string {
if err != nil {
return nil
}
- return commands.CompletionFromList(files, arg)
+ return commands.FilterList(files, arg, nil)
}
func (r Recover) Execute(args []string) error {
diff --git a/commands/account/search.go b/commands/account/search.go
index ca1b9684..10481e8e 100644
--- a/commands/account/search.go
+++ b/commands/account/search.go
@@ -42,15 +42,15 @@ func (SearchFilter) Aliases() []string {
}
func (*SearchFilter) CompleteFlag(arg string) []string {
- return commands.CompletionFromList(commands.GetFlagList(), arg)
+ return commands.FilterList(commands.GetFlagList(), arg, commands.QuoteSpace)
}
func (*SearchFilter) CompleteAddress(arg string) []string {
- return commands.CompletionFromList(commands.GetAddress(arg), arg)
+ return commands.FilterList(commands.GetAddress(arg), arg, commands.QuoteSpace)
}
func (*SearchFilter) CompleteDate(arg string) []string {
- return commands.CompletionFromList(commands.GetDateList(), arg)
+ return commands.FilterList(commands.GetDateList(), arg, commands.QuoteSpace)
}
func (s *SearchFilter) ParseRead(arg string) error {
diff --git a/commands/account/sort.go b/commands/account/sort.go
index ccccab25..3103a388 100644
--- a/commands/account/sort.go
+++ b/commands/account/sort.go
@@ -38,7 +38,7 @@ var supportedCriteria = []string{
}
func (*Sort) CompleteCriteria(arg string) []string {
- return commands.CompletionFromList(supportedCriteria, arg)
+ return commands.FilterList(supportedCriteria, arg, commands.QuoteSpace)
}
func (Sort) Execute(args []string) error {
diff --git a/commands/commands.go b/commands/commands.go
index 9c193018..2893aa82 100644
--- a/commands/commands.go
+++ b/commands/commands.go
@@ -163,9 +163,7 @@ func GetTemplateCompletion(
options := FilterList(
templates.Terms(),
strings.TrimSpace(search),
- "",
- "",
- app.SelectedAccountUiConfig().FuzzyComplete,
+ nil,
)
return options, prefix + padding, true
case countLeft == countRight:
@@ -196,7 +194,7 @@ func GetFolders(arg string) []string {
if acct == nil {
return make([]string, 0)
}
- return CompletionFromList(acct.Directories().List(), arg)
+ return FilterList(acct.Directories().List(), arg, nil)
}
func GetTemplates(arg string) []string {
@@ -213,13 +211,7 @@ func GetTemplates(arg string) []string {
names = append(names, n)
}
sort.Strings(names)
- return CompletionFromList(names, arg)
-}
-
-// CompletionFromList provides a convenience wrapper for commands to use in a
-// complete callback. It simply matches the items provided in valid
-func CompletionFromList(valid []string, arg string) []string {
- return FilterList(valid, arg, "", "", app.SelectedAccountUiConfig().FuzzyComplete)
+ return FilterList(names, arg, nil)
}
func GetLabels(arg string) []string {
@@ -240,7 +232,9 @@ func GetLabels(arg string) []string {
}
arg = strings.TrimLeft(arg, "+-")
}
- return FilterList(acct.Labels(), arg, prefix, " ", acct.UiConfig().FuzzyComplete)
+ return FilterList(acct.Labels(), arg, func(s string) string {
+ return opt.QuoteArg(prefix+s) + " "
+ })
}
// hasCaseSmartPrefix checks whether s starts with prefix, using a case
diff --git a/commands/compose/detach.go b/commands/compose/detach.go
index 91cf2a58..0ac3334e 100644
--- a/commands/compose/detach.go
+++ b/commands/compose/detach.go
@@ -21,7 +21,7 @@ func (Detach) Aliases() []string {
func (*Detach) CompletePath(arg string) []string {
composer, _ := app.SelectedTabContent().(*app.Composer)
- return commands.CompletionFromList(composer.GetAttachments(), arg)
+ return commands.FilterList(composer.GetAttachments(), arg, nil)
}
func (d Detach) Execute(args []string) error {
diff --git a/commands/compose/header.go b/commands/compose/header.go
index afc27e92..3283d4e3 100644
--- a/commands/compose/header.go
+++ b/commands/compose/header.go
@@ -38,7 +38,7 @@ func (Header) Options() string {
}
func (*Header) CompleteHeaders(arg string) []string {
- return commands.CompletionFromList(headers, arg)
+ return commands.FilterList(headers, arg, commands.QuoteSpace)
}
func (h Header) Execute(args []string) error {
diff --git a/commands/compose/multipart.go b/commands/compose/multipart.go
index 5b701342..a004ea2b 100644
--- a/commands/compose/multipart.go
+++ b/commands/compose/multipart.go
@@ -27,7 +27,7 @@ func (*Multipart) CompleteMime(arg string) []string {
for mime := range config.Converters {
completions = append(completions, mime)
}
- return commands.CompletionFromList(completions, arg)
+ return commands.FilterList(completions, arg, nil)
}
func (m Multipart) Execute(args []string) error {
diff --git a/commands/compose/send.go b/commands/compose/send.go
index 91fd42bd..315b6915 100644
--- a/commands/compose/send.go
+++ b/commands/compose/send.go
@@ -41,7 +41,7 @@ func (Send) Aliases() []string {
}
func (*Send) CompleteArchive(arg string) []string {
- return commands.CompletionFromList(msg.ARCHIVE_TYPES, arg)
+ return commands.FilterList(msg.ARCHIVE_TYPES, arg, nil)
}
func (*Send) CompleteFolders(arg string) []string {
diff --git a/commands/compose/switch.go b/commands/compose/switch.go
index 637099b5..c71716e0 100644
--- a/commands/compose/switch.go
+++ b/commands/compose/switch.go
@@ -26,7 +26,7 @@ func (SwitchAccount) Aliases() []string {
}
func (*SwitchAccount) CompleteAccount(arg string) []string {
- return commands.CompletionFromList(app.AccountNames(), arg)
+ return commands.FilterList(app.AccountNames(), arg, nil)
}
func (s SwitchAccount) Execute(args []string) error {
diff --git a/commands/ct.go b/commands/ct.go
index 2d057b4f..9948e691 100644
--- a/commands/ct.go
+++ b/commands/ct.go
@@ -21,7 +21,7 @@ func (ChangeTab) Aliases() []string {
}
func (*ChangeTab) CompleteTab(arg string) []string {
- return CompletionFromList(app.TabNames(), arg)
+ return FilterList(app.TabNames(), arg, nil)
}
func (c ChangeTab) Execute(args []string) error {
diff --git a/commands/help.go b/commands/help.go
index 07332303..a3cfff40 100644
--- a/commands/help.go
+++ b/commands/help.go
@@ -36,7 +36,7 @@ func (Help) Aliases() []string {
}
func (*Help) CompleteTopic(arg string) []string {
- return CompletionFromList(pages, arg)
+ return FilterList(pages, arg, nil)
}
func (h *Help) ParseTopic(arg string) error {
diff --git a/commands/msg/archive.go b/commands/msg/archive.go
index 34cba8b8..5c97e2da 100644
--- a/commands/msg/archive.go
+++ b/commands/msg/archive.go
@@ -43,7 +43,7 @@ func (Archive) Aliases() []string {
}
func (*Archive) CompleteType(arg string) []string {
- return commands.CompletionFromList(ARCHIVE_TYPES, arg)
+ return commands.FilterList(ARCHIVE_TYPES, arg, nil)
}
func (a Archive) Execute(args []string) error {
diff --git a/commands/msg/read.go b/commands/msg/read.go
index 72159a53..a92a4d0a 100644
--- a/commands/msg/read.go
+++ b/commands/msg/read.go
@@ -46,7 +46,7 @@ func (f *FlagMsg) ParseFlag(arg string) error {
var validFlags = []string{"seen", "answered", "flagged"}
func (*FlagMsg) CompleteFlag(arg string) []string {
- return commands.CompletionFromList(validFlags, arg)
+ return commands.FilterList(validFlags, arg, nil)
}
// If this was called as 'flag' or 'unflag', without the toggle (-t)
diff --git a/commands/msgview/open-link.go b/commands/msgview/open-link.go
index eceb4232..b13f5d4f 100644
--- a/commands/msgview/open-link.go
+++ b/commands/msgview/open-link.go
@@ -27,7 +27,7 @@ func (*OpenLink) CompleteUrl(arg string) []string {
mv := app.SelectedTabContent().(*app.MessageViewer)
if mv != nil {
if p := mv.SelectedMessagePart(); p != nil {
- return commands.CompletionFromList(p.Links, arg)
+ return commands.FilterList(p.Links, arg, nil)
}
}
return nil
diff --git a/commands/prompt.go b/commands/prompt.go
index d791f7a9..4fcf8a80 100644
--- a/commands/prompt.go
+++ b/commands/prompt.go
@@ -20,7 +20,7 @@ func (Prompt) Aliases() []string {
}
func (*Prompt) CompleteCommand(arg string) []string {
- return CompletionFromList(GlobalCommands.Names(), arg)
+ return FilterList(GlobalCommands.Names(), arg, nil)
}
func (p Prompt) Execute(args []string) error {
diff --git a/commands/util.go b/commands/util.go
index 726669af..c2c530da 100644
--- a/commands/util.go
+++ b/commands/util.go
@@ -228,18 +228,29 @@ func MsgInfoFromUids(store *lib.MessageStore, uids []uint32, statusInfo func(str
return infos, nil
}
+func QuoteSpace(s string) string {
+ return opt.QuoteArg(s) + " "
+}
+
// FilterList takes a list of valid completions and filters it, either
-// by case smart prefix, or by fuzzy matching, prepending "prefix" to each completion
-func FilterList(valid []string, search, prefix, suffix string, isFuzzy bool) []string {
+// by case smart prefix, or by fuzzy matching
+// An optional post processing function can be passed to prepend, append or
+// quote each value.
+func FilterList(
+ valid []string, search string, postProc func(string) string,
+) []string {
+ if postProc == nil {
+ postProc = opt.QuoteArg
+ }
out := make([]string, 0, len(valid))
- if isFuzzy {
+ if app.SelectedAccountUiConfig().FuzzyComplete {
for _, v := range fuzzy.RankFindFold(search, valid) {
- out = append(out, opt.QuoteArg(prefix+v.Target)+suffix)
+ out = append(out, postProc(v.Target))
}
} else {
for _, v := range valid {
if hasCaseSmartPrefix(v, search) {
- out = append(out, opt.QuoteArg(prefix+v)+suffix)
+ out = append(out, postProc(v))
}
}
}