// Package guide ships eeco's in-binary user manual. It embeds a // verbatim mirror of docs/USAGE.md so any installation of eeco can // read the full user-facing reference offline, regardless of install // route or network access. The embedded copy is drift-gated against // docs/USAGE.md (see TestUsageMirrorsDocs). package guide import ( _ "embed" "io" "os" "os/exec" "strings" ) //go:embed usage.md var usage string // Text returns the embedded guide content. Byte-identical to // docs/USAGE.md at the tag the binary was built from. func Text() string { return usage } // Dump writes the embedded guide to w verbatim, byte-identical to // docs/USAGE.md. The non-TTY / piped entry point — machine consumers // get raw Markdown with no ANSI. func Dump(w io.Writer) error { _, err := io.WriteString(w, usage) return err } // DumpRendered writes the prettified guide (see Render) to w. The // interactive fallback used when no pager is available, so a terminal // user still gets box-drawing tables and styled headings. func DumpRendered(w io.Writer, colour bool) error { _, err := io.WriteString(w, Render(colour)) return err } // PagerCommand builds a paginator *exec.Cmd that reads content from // stdin. It honours $PAGER (split on whitespace), falls back to // `less -R`, and returns nil when neither is available. The returned // command leaves Stdout / Stderr unset so the caller can attach the // real terminal file descriptors. lookPath / getenv are injectable for // tests. func PagerCommand(content string, getenv func(string) string, lookPath func(string) (string, error)) *exec.Cmd { if getenv == nil { getenv = os.Getenv } if lookPath == nil { lookPath = exec.LookPath } if p := strings.TrimSpace(getenv("PAGER")); p != "" { fields := strings.Fields(p) if resolved, err := lookPath(fields[0]); err == nil { cmd := exec.Command(resolved, fields[1:]...) cmd.Stdin = strings.NewReader(content) return cmd } } if resolved, err := lookPath("less"); err == nil { cmd := exec.Command(resolved, "-R") cmd.Stdin = strings.NewReader(content) return cmd } return nil }