package main import ( "flag" "fmt" "io" "log" "os" "strings" "github.com/chzyer/readline" ) var cmdMode = flag.String("c", "", "") var helpMode = flag.Bool("h", false, "") func main() { conf, err := getConfig() if err != nil { log.Fatal(err) } if err := getTofuStore(); err != nil { log.Fatal(err) } state := NewBrowserState(conf) marks, err := getMarks() if err != nil { log.Fatal(err) } state.Marks = marks tours, err := getTours() if err != nil { log.Fatal(err) } state.NamedTours = tours idents, err := getIdentities() if err != nil { log.Fatal(err) } state.Identities = idents flag.Parse() if *helpMode { if err := Help(state, "cli"); err != nil { writeError(err.Error()) } return } if *cmdMode != "" { conf.Quiet = true state.Quiet = true if err := handleCmdLine(state, conf, *cmdMode); err != nil { writeError(err.Error()) } return } rl, err := readline.New(Prompt) if err != nil { log.Fatal(err) } if conf.VimKeys { rl.SetVimMode(true) } state.Readline = rl if urls := flag.Args(); len(urls) > 0 { if err := Go(state, urls[0], conf); err != nil { writeError(err.Error()) } } for { rl.SetPrompt(Prompt) line, err := rl.Readline() if err == io.EOF { break } if err != nil { log.Fatal(err) } if err := handleCmdLine(state, conf, line); err != nil { writeError(err.Error()) } } } func handleCmdLine(state *BrowserState, conf *Config, line string) error { for _, cmd := range strings.Split(line, ";") { if c, err := ParseCommand(strings.TrimSpace(cmd)); err != nil { return err } else if err := RunCommand(conf, c, state); err != nil { return err } } return nil } const Prompt = promptStyle + "X-1" + ansiClear + "> " func writeError(msg string) { fmt.Fprintf(os.Stdout, "\x1b[31m%s\x1b[0m\n", msg) }