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

package main
import (
"errors"
"fmt"
"io"
"io/fs"
"os"
"path"
"runtime/pprof"
"github.com/antonmedv/fx/pkg/model"
tea "github.com/charmbracelet/bubbletea"
"github.com/mattn/go-isatty"
)
var (
flagHelp bool
flagVersion bool
)
func main() {
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)
}
var args []string
for _, arg := range os.Args[1:] {
switch arg {
case "-h", "--help":
flagHelp = true
case "-v", "-V", "--version":
flagVersion = true
case "--themes":
model.ThemeTester()
return
case "--export-themes":
model.ExportThemes()
return
default:
args = append(args, arg)
}
}
if flagHelp {
fmt.Println(usage(model.GetKeyMap()))
return
}
if flagVersion {
fmt.Println(version)
return
}
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 {
filePath := args[0]
f, err := os.Open(filePath)
if err != nil {
var pathError *fs.PathError
if errors.As(err, &pathError) {
fmt.Println(err)
os.Exit(1)
} else {
panic(err)
}
}
fileName = path.Base(filePath)
src = f
} else if !stdinIsTty && len(args) == 0 {
src = os.Stdin
} else {
reduce(args)
return
}
m, err := model.New(model.Config{
Source: src,
FileName: fileName,
})
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)
}
}