Enha (shell): tabcompletion depth and limit

This commit is contained in:
Grail Finder
2026-02-19 10:14:16 +03:00
parent 7c1a8b0122
commit d3361c13c5
2 changed files with 41 additions and 12 deletions

View File

@@ -9,6 +9,7 @@ import (
"os" "os"
"os/exec" "os/exec"
"path" "path"
"path/filepath"
"slices" "slices"
"strings" "strings"
"unicode" "unicode"
@@ -706,23 +707,51 @@ func searchPrev() {
// == tab completion == // == tab completion ==
func scanFiles(dir, filter string) []string { func scanFiles(dir, filter string) []string {
const maxDepth = 3
const maxFiles = 50
var files []string var files []string
entries, err := os.ReadDir(dir)
if err != nil { var scanRecursive func(currentDir string, currentDepth int, relPath string)
return files 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
}
for _, entry := range entries { for _, entry := range entries {
if len(files) >= maxFiles {
return
}
name := entry.Name() name := entry.Name()
if strings.HasPrefix(name, ".") { if strings.HasPrefix(name, ".") {
continue continue
} }
if filter == "" || strings.HasPrefix(strings.ToLower(name), strings.ToLower(filter)) {
fullPath := name
if relPath != "" {
fullPath = relPath + "/" + name
}
if entry.IsDir() { if entry.IsDir() {
files = append(files, name+"/") // Recursively scan subdirectories
scanRecursive(filepath.Join(currentDir, name), currentDepth+1, fullPath)
} else { } 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 return files
} }

2
tui.go
View File

@@ -112,7 +112,7 @@ var (
[yellow]x[white]: to exit [yellow]x[white]: to exit
=== shell mode === === 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 === === status line ===
%s %s