You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fx/main.go

112 lines
1.8 KiB
Go

10 months ago
package main
import (
10 months ago
"errors"
10 months ago
"fmt"
"io"
10 months ago
"io/fs"
10 months ago
"os"
10 months ago
"path"
10 months ago
"runtime/pprof"
10 months ago
"github.com/antonmedv/fx/pkg/model"
10 months ago
tea "github.com/charmbracelet/bubbletea"
10 months ago
"github.com/mattn/go-isatty"
10 months ago
)
10 months ago
var (
flagHelp bool
flagVersion bool
)
10 months ago
func main() {
10 months ago
if _, ok := os.LookupEnv("FX_PPROF"); ok {
f, err := os.Create("cpu.prof")
if err != nil {
panic(err)
}
err = pprof.StartCPUProfile(f)
if err != nil {
panic(err)
}
defer pprof.StopCPUProfile()
memProf, err := os.Create("mem.prof")
if err != nil {
panic(err)
}
defer pprof.WriteHeapProfile(memProf)
10 months ago
}
10 months ago
10 months ago
var args []string
for _, arg := range os.Args[1:] {
switch arg {
case "-h", "--help":
flagHelp = true
case "-v", "-V", "--version":
flagVersion = true
10 months ago
case "--themes":
model.ThemeTester()
10 months ago
return
case "--export-themes":
model.ExportThemes()
return
10 months ago
default:
args = append(args, arg)
}
}
10 months ago
10 months ago
if flagHelp {
fmt.Println(usage(model.GetKeyMap()))
10 months ago
return
}
10 months ago
10 months ago
if flagVersion {
fmt.Println(version)
return
}
10 months ago
stdinIsTty := isatty.IsTerminal(os.Stdin.Fd())
var fileName string
var src io.Reader
if stdinIsTty && len(args) == 0 {
fmt.Println(usage(model.GetKeyMap()))
return
} else if stdinIsTty && len(args) == 1 {
10 months ago
filePath := args[0]
f, err := os.Open(filePath)
if err != nil {
10 months ago
var pathError *fs.PathError
if errors.As(err, &pathError) {
10 months ago
fmt.Println(err)
os.Exit(1)
10 months ago
} else {
10 months ago
panic(err)
}
}
fileName = path.Base(filePath)
src = f
10 months ago
} else if !stdinIsTty && len(args) == 0 {
10 months ago
src = os.Stdin
10 months ago
} else {
reduce(args)
return
10 months ago
}
m, err := model.New(model.Config{
Source: src,
FileName: fileName,
})
10 months ago
if err != nil {
fmt.Print(err.Error())
os.Exit(1)
return
}
p := tea.NewProgram(m, tea.WithAltScreen(), tea.WithMouseCellMotion())
_, err = p.Run()
if err != nil {
panic(err)
}
}