diff options
Diffstat (limited to 'state.go')
| -rw-r--r-- | state.go | 45 |
1 files changed, 45 insertions, 0 deletions
@@ -1,7 +1,11 @@ package main import ( + "bytes" + "errors" "net/url" + "os" + "os/exec" "github.com/chzyer/readline" ) @@ -21,6 +25,7 @@ type BrowserState struct { CurrentTour *Tour Readline *readline.Instance + Printer Printer } type History struct { @@ -60,3 +65,43 @@ func NewBrowserState(conf *Config) *BrowserState { state.CurrentTour = &state.DefaultTour return state } + +type Printer interface { + PrintModal(*BrowserState, []byte) error + PrintPage(*BrowserState, string) error +} + +type PromptPrinter struct{} + +func (_ PromptPrinter) PrintModal(state *BrowserState, contents []byte) error { + _, err := os.Stdout.Write(contents) + return err +} + +func (_ PromptPrinter) PrintPage(state *BrowserState, body string) error { + if state.Quiet { + return nil + } + + lessarg := []string{} + switch state.Pager { + case "auto": + lessarg = []string{"-F"} + fallthrough + case "always": + less, err := exec.LookPath("less") + if err != nil { + return err + } + cmd := exec.Command(less, lessarg...) + cmd.Stdin = bytes.NewBufferString(body) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + return cmd.Run() + case "never": + _, err := os.Stdout.WriteString(body) + return err + default: + return errors.New("invalid 'pager' value in configuration") + } +} |
