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) } }