summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorGalen Abell <galen@galenabell.com>2019-07-30 15:10:58 -0400
committerDrew DeVault <sir@cmpwn.com>2019-08-02 09:22:40 -0400
commitbfefafff27b126c485054c4d357e095ea2bd1147 (patch)
treeef8e6f34c21011206cf87aacdb2d65b731832cf9
parentc4b57aaad8a48a1347a0404001fdcb13532c7620 (diff)
downloadaerc-bfefafff27b126c485054c4d357e095ea2bd1147.tar.gz
Add filesystem completions for :attach and :cd
Tab-completions now cycle through filesystem paths when using :attach or
:cd commands.
-rw-r--r--commands/cd.go18
-rw-r--r--commands/compose/attach.go8
2 files changed, 24 insertions, 2 deletions
diff --git a/commands/cd.go b/commands/cd.go
index 8c9cb21..3630cae 100644
--- a/commands/cd.go
+++ b/commands/cd.go
@@ -3,6 +3,7 @@ package commands
 import (
 	"errors"
 	"os"
+	"strings"
 
 	"git.sr.ht/~sircmpwn/aerc/widgets"
 	"github.com/mitchellh/go-homedir"
@@ -23,7 +24,22 @@ func (_ ChangeDirectory) Aliases() []string {
 }
 
 func (_ ChangeDirectory) Complete(aerc *widgets.Aerc, args []string) []string {
-	return nil
+	path := ""
+	if len(args) >= 1 {
+		path = args[0]
+	}
+
+	completions := CompletePath(path)
+
+	var dirs []string
+	for _, c := range completions {
+		// filter out non-directories
+		if strings.HasSuffix(c, "/") {
+			dirs = append(dirs, c)
+		}
+	}
+
+	return dirs
 }
 
 func (_ ChangeDirectory) Execute(aerc *widgets.Aerc, args []string) error {
diff --git a/commands/compose/attach.go b/commands/compose/attach.go
index 43aa32d..7501a33 100644
--- a/commands/compose/attach.go
+++ b/commands/compose/attach.go
@@ -5,6 +5,7 @@ import (
 	"os"
 	"time"
 
+	"git.sr.ht/~sircmpwn/aerc/commands"
 	"git.sr.ht/~sircmpwn/aerc/widgets"
 	"github.com/gdamore/tcell"
 	"github.com/mitchellh/go-homedir"
@@ -21,7 +22,12 @@ func (_ Attach) Aliases() []string {
 }
 
 func (_ Attach) Complete(aerc *widgets.Aerc, args []string) []string {
-	return nil
+	path := ""
+	if len(args) >= 1 {
+		path = args[0]
+	}
+
+	return commands.CompletePath(path)
 }
 
 func (_ Attach) Execute(aerc *widgets.Aerc, args []string) error {