gitstack

grindlemire/go-tui code browser

826 B Go 46 lines 2026-03-12 · aa22d79 raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Package main demonstrates a foldable directory tree with keyboard navigation.
//
// Usage:
//
//	go run ../../cmd/tui generate tree.gsx
//	go run . [path]
//
// If no path is given, the current directory is used.
package main

import (
	"fmt"
	"os"
	"path/filepath"

	tui "github.com/grindlemire/go-tui"
)

//go:generate go run ../../cmd/tui generate tree.gsx

func main() {
	root := "."
	if len(os.Args) > 1 {
		root = os.Args[1]
	}

	absRoot, err := filepath.Abs(root)
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %v\n", err)
		os.Exit(1)
	}

	app, err := tui.NewApp(
		tui.WithRootComponent(DirectoryTree(absRoot)),
	)
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %v\n", err)
		os.Exit(1)
	}
	defer app.Close()

	if err := app.Run(); err != nil {
		fmt.Fprintf(os.Stderr, "Error: %v\n", err)
		os.Exit(1)
	}
}