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/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
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
}
for _, entry := range entries {
if len(files) >= maxFiles {
return
}
name := entry.Name()
if strings.HasPrefix(name, ".") {
continue
}
if filter == "" || strings.HasPrefix(strings.ToLower(name), strings.ToLower(filter)) {
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
}

2
tui.go
View File

@@ -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