From a69742c81c7d46a71adce5d39da28a5b839d5716 Mon Sep 17 00:00:00 2001 From: tjp Date: Wed, 10 Jan 2024 11:02:57 -0700 Subject: cli goodies -h to print "help cli" output -c CMDS to run commands in quiet mode and then exit execute with URL as positional argument to go there and start the interactive session --- main.go | 56 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 11 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 0c1e7da..7ad9b4a 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "flag" "fmt" "io" "log" @@ -10,6 +11,9 @@ import ( "github.com/chzyer/readline" ) +var cmdMode = flag.String("c", "", "") +var helpMode = flag.Bool("h", false, "") + func main() { conf, err := getConfig() if err != nil { @@ -22,11 +26,6 @@ func main() { state := NewBrowserState(conf) - rl, err := readline.New(Prompt) - if err != nil { - log.Fatal(err) - } - marks, err := getMarks() if err != nil { log.Fatal(err) @@ -45,11 +44,40 @@ func main() { } 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() @@ -60,15 +88,21 @@ func main() { log.Fatal(err) } - for _, cmd := range strings.Split(line, ";") { - if c, err := ParseCommand(strings.TrimSpace(cmd)); err != nil { - writeError(err.Error()) - } else if err := RunCommand(conf, c, state); err != nil { - writeError(err.Error()) - } + 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 + "> " -- cgit v1.2.3