summaryrefslogtreecommitdiff
path: root/state.go
diff options
context:
space:
mode:
Diffstat (limited to 'state.go')
-rw-r--r--state.go45
1 files changed, 45 insertions, 0 deletions
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")
+ }
+}