▍ humdrum codex / glint v1.0.2
license AGPL-3.0
1.7 KB 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Command glint is a modeless terminal markdown editor with live styling.
package main

import (
	"flag"
	"fmt"
	"os"

	"glint/internal/app"
	"glint/internal/config"

	tea "github.com/charmbracelet/bubbletea"
)

// version is the build version, overridden at release time via
// -ldflags "-X main.version=<v>" (the Homebrew formula sets it).
var version = "dev"

func main() {
	if a := os.Args[1:]; len(a) > 0 && (a[0] == "version" || a[0] == "--version" || a[0] == "-v") {
		fmt.Println("glint", version)
		return
	}

	cfg, err := config.Load()
	if err != nil {
		fmt.Fprintln(os.Stderr, "glint: config:", err)
	}
	a := app.New(cfg)

	// Subcommands run before flag parsing.
	if args := os.Args[1:]; len(args) > 0 {
		switch args[0] {
		case "new": // `glint new [name]` — blank buffer, or a named note under the inbox
			name := ""
			if len(args) > 1 {
				name = args[1]
			}
			if err := a.StartNew(name); err != nil {
				fmt.Fprintln(os.Stderr, "glint:", err)
				os.Exit(1)
			}
			run(a)
			return
		case "vault": // `glint vault` — open the picker over the configured vault, from anywhere
			if err := a.StartVault(); err != nil {
				fmt.Fprintln(os.Stderr, "glint:", err)
				os.Exit(1)
			}
			run(a)
			return
		}
	}

	daily := flag.Bool("daily", false, "open today's daily note")
	flag.Parse()

	var path string
	if args := flag.Args(); len(args) > 0 {
		path = args[0]
	}
	if err := a.Start(path, *daily); err != nil {
		fmt.Fprintln(os.Stderr, "glint:", err)
		os.Exit(1)
	}
	run(a)
}

// run drives the Bubbletea program in the alternate screen.
func run(a *app.App) {
	if _, err := tea.NewProgram(a, tea.WithAltScreen(), tea.WithMouseCellMotion()).Run(); err != nil {
		fmt.Fprintln(os.Stderr, "glint:", err)
		os.Exit(1)
	}
}