118 lines
1.9 KiB
Go
118 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/chzyer/readline"
|
|
)
|
|
|
|
var cmdMode = flag.String("c", "", "")
|
|
var helpMode = flag.Bool("h", false, "")
|
|
var quietMode = flag.Bool("q", 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
|
|
}
|
|
|
|
if *quietMode {
|
|
state.Quiet = true
|
|
}
|
|
|
|
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)
|
|
}
|