feat: add Go TUI rendering and terminal helper functions
7 funciones Go del dominio tui: apply_gradient (gradiente de color en texto), draw_box y draw_separator (renderizado de cajas y separadores con box_chars), load_ascii_art (carga de arte ASCII desde archivos), normalize_terminal_output y strip_ansi (limpieza de salida de terminal), read_dir_autocomplete (autocompletado de rutas de directorio). Incluye box_chars.go como helper de caracteres Unicode para bordes.
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
package tui
|
||||
|
||||
import (
|
||||
"os"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// AutocompleteCandidate represents a directory entry for path autocomplete.
|
||||
type AutocompleteCandidate struct {
|
||||
Name string
|
||||
IsDir bool
|
||||
}
|
||||
|
||||
// ReadDirAutocomplete reads entries from searchDir whose name starts with prefix
|
||||
// (case-insensitive). Returns candidates sorted by name.
|
||||
func ReadDirAutocomplete(searchDir, prefix string) ([]AutocompleteCandidate, error) {
|
||||
entries, err := os.ReadDir(searchDir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
prefixLower := strings.ToLower(prefix)
|
||||
var results []AutocompleteCandidate
|
||||
for _, e := range entries {
|
||||
name := e.Name()
|
||||
if prefix == "" || strings.HasPrefix(strings.ToLower(name), prefixLower) {
|
||||
results = append(results, AutocompleteCandidate{Name: name, IsDir: e.IsDir()})
|
||||
}
|
||||
}
|
||||
sort.Slice(results, func(i, j int) bool { return results[i].Name < results[j].Name })
|
||||
return results, nil
|
||||
}
|
||||
Reference in New Issue
Block a user