summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helpfuncs.go51
-rw-r--r--tui.go2
2 files changed, 41 insertions, 12 deletions
diff --git a/helpfuncs.go b/helpfuncs.go
index 350b6ed..194d5a9 100644
--- a/helpfuncs.go
+++ b/helpfuncs.go
@@ -9,6 +9,7 @@ import (
"os"
"os/exec"
"path"
+ "path/filepath"
"slices"
"strings"
"unicode"
@@ -706,23 +707,51 @@ func searchPrev() {
// == tab completion ==
func scanFiles(dir, filter string) []string {
+ const maxDepth = 3
+ const maxFiles = 50
var files []string
- entries, err := os.ReadDir(dir)
- if err != nil {
- return files
- }
- for _, entry := range entries {
- name := entry.Name()
- if strings.HasPrefix(name, ".") {
- continue
+
+ var scanRecursive func(currentDir string, currentDepth int, relPath string)
+ scanRecursive = func(currentDir string, currentDepth int, relPath string) {
+ if len(files) >= maxFiles {
+ return
+ }
+ if currentDepth > maxDepth {
+ return
+ }
+
+ entries, err := os.ReadDir(currentDir)
+ if err != nil {
+ return
}
- if filter == "" || strings.HasPrefix(strings.ToLower(name), strings.ToLower(filter)) {
+
+ for _, entry := range entries {
+ if len(files) >= maxFiles {
+ return
+ }
+
+ name := entry.Name()
+ if strings.HasPrefix(name, ".") {
+ continue
+ }
+
+ fullPath := name
+ if relPath != "" {
+ fullPath = relPath + "/" + name
+ }
+
if entry.IsDir() {
- files = append(files, name+"/")
+ // Recursively scan subdirectories
+ scanRecursive(filepath.Join(currentDir, name), currentDepth+1, fullPath)
} else {
- files = append(files, name)
+ // Check if file matches filter
+ if filter == "" || strings.HasPrefix(strings.ToLower(fullPath), strings.ToLower(filter)) {
+ files = append(files, fullPath)
+ }
}
}
}
+
+ scanRecursive(dir, 0, "")
return files
}
diff --git a/tui.go b/tui.go
index 517ba20..0d2cd92 100644
--- a/tui.go
+++ b/tui.go
@@ -112,7 +112,7 @@ var (
[yellow]x[white]: to exit
=== shell mode ===
-[yellow]@match->Tab[white]: file completion (type @ in input to get file suggestions)
+ [yellow]@match->Tab[white]: file completion with relative paths (recursive, depth 3, max 50 files)
=== status line ===
%s