modify-labels: add completion
This commit is contained in:
parent
40ceee969b
commit
00263bf866
|
@ -2,6 +2,7 @@ package commands
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
"unicode"
|
||||
|
@ -127,6 +128,40 @@ func GetFolders(aerc *widgets.Aerc, args []string) []string {
|
|||
return out
|
||||
}
|
||||
|
||||
func GetLabels(aerc *widgets.Aerc, args []string) []string {
|
||||
if len(args) == 0 {
|
||||
return aerc.SelectedAccount().Labels()
|
||||
}
|
||||
|
||||
// + and - are used to denote tag addition / removal and need to be striped
|
||||
// only the last tag should be completed, so that multiple labels can be
|
||||
// selected
|
||||
last := args[len(args)-1]
|
||||
others := strings.Join(args[:len(args)-1], " ")
|
||||
var prefix string
|
||||
switch last[0] {
|
||||
case '+':
|
||||
prefix = "+"
|
||||
case '-':
|
||||
prefix = "-"
|
||||
default:
|
||||
prefix = ""
|
||||
}
|
||||
trimmed := strings.TrimLeft(last, "+-")
|
||||
|
||||
out := make([]string, 0)
|
||||
for _, label := range aerc.SelectedAccount().Labels() {
|
||||
if hasCaseSmartPrefix(label, trimmed) {
|
||||
var prev string
|
||||
if len(others) > 0 {
|
||||
prev = others + " "
|
||||
}
|
||||
out = append(out, fmt.Sprintf("%v%v%v", prev, prefix, label))
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// hasCaseSmartPrefix checks whether s starts with prefix, using a case
|
||||
// sensitive match if and only if prefix contains upper case letters.
|
||||
func hasCaseSmartPrefix(s, prefix string) bool {
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"errors"
|
||||
"time"
|
||||
|
||||
"git.sr.ht/~sircmpwn/aerc/commands"
|
||||
"git.sr.ht/~sircmpwn/aerc/widgets"
|
||||
"git.sr.ht/~sircmpwn/aerc/worker/types"
|
||||
"github.com/gdamore/tcell"
|
||||
|
@ -20,7 +21,7 @@ func (ModifyLabels) Aliases() []string {
|
|||
}
|
||||
|
||||
func (ModifyLabels) Complete(aerc *widgets.Aerc, args []string) []string {
|
||||
return nil
|
||||
return commands.GetLabels(aerc, args)
|
||||
}
|
||||
|
||||
func (ModifyLabels) Execute(aerc *widgets.Aerc, args []string) error {
|
||||
|
|
Loading…
Reference in New Issue