From 865c6dc23099e129cb3ba9709b2926734144e605 Mon Sep 17 00:00:00 2001 From: tjp Date: Tue, 23 Jan 2024 22:42:18 -0700 Subject: Printer abstraction --- state.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'state.go') diff --git a/state.go b/state.go index 57767a8..918346f 100644 --- a/state.go +++ b/state.go @@ -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") + } +} -- cgit v1.2.3