about summary refs log tree commit diff stats
path: root/commands
diff options
context:
space:
mode:
authorJeffas <dev@jeffas.io>2019-07-26 14:29:40 +0100
committerDrew DeVault <sir@cmpwn.com>2019-07-26 14:39:42 -0400
commitcded067bc3919a77b17feedd877e4590e7c95f4a (patch)
treef359c28abd705167e3bf013faf8d4d1af4887f29 /commands
parentaabe3d9b3a58efd9f0ad9b39917b85092d0955a1 (diff)
downloadaerc-cded067bc3919a77b17feedd877e4590e7c95f4a.tar.gz
Add tab completion to textinputs
This adds tab completion to textinput components. They can be configured
with a completion function. This function is called when the user
presses <tab>. The first completion is initially shown to the user
inserted into the text. Repeated presses of <tab> or <backtab> cycle
through the completions list. The completions list is invalidated when
any other non-tab-like key is pressed.

Also changed is some logic for current completion generation so that
all available commands are returned when <tab> is pressed with no
current text and similarly for arguments of commands.
Diffstat (limited to 'commands')
-rw-r--r--commands/commands.go17
-rw-r--r--commands/ct.go3
2 files changed, 17 insertions, 3 deletions
diff --git a/commands/commands.go b/commands/commands.go
index c6f149f..3f7fbcd 100644
--- a/commands/commands.go
+++ b/commands/commands.go
@@ -2,6 +2,7 @@ package commands
 
 import (
 	"errors"
+	"sort"
 	"strings"
 	"unicode"
 
@@ -73,12 +74,19 @@ func (cmds *Commands) GetCompletions(aerc *widgets.Aerc, cmd string) []string {
 	}
 
 	if len(args) == 0 {
-		return nil
+		names := cmds.Names()
+		sort.Strings(names)
+		return names
 	}
 
-	if len(args) > 1 {
+	if len(args) > 1 || cmd[len(cmd)-1] == ' ' {
 		if cmd, ok := cmds.dict()[args[0]]; ok {
-			completions := cmd.Complete(aerc, args[1:])
+			var completions []string
+			if len(args) > 1 {
+				completions = cmd.Complete(aerc, args[1:])
+			} else {
+				completions = cmd.Complete(aerc, []string{})
+			}
 			if completions != nil && len(completions) == 0 {
 				return nil
 			}
@@ -109,6 +117,9 @@ func (cmds *Commands) GetCompletions(aerc *widgets.Aerc, cmd string) []string {
 func GetFolders(aerc *widgets.Aerc, args []string) []string {
 	out := make([]string, 0)
 	lower_only := false
+	if len(args) == 0 {
+		return aerc.SelectedAccount().Directories().List()
+	}
 	for _, rune := range args[0] {
 		lower_only = lower_only || unicode.IsLower(rune)
 	}
diff --git a/commands/ct.go b/commands/ct.go
index ab2993d..19fb63a 100644
--- a/commands/ct.go
+++ b/commands/ct.go
@@ -19,6 +19,9 @@ func (_ ChangeTab) Aliases() []string {
 }
 
 func (_ ChangeTab) Complete(aerc *widgets.Aerc, args []string) []string {
+	if len(args) == 0 {
+		return aerc.TabNames()
+	}
 	out := make([]string, 0)
 	for _, tab := range aerc.TabNames() {
 		if strings.HasPrefix(tab, args[0]) {