summaryrefslogtreecommitdiff
path: root/man/manview/manview.go
blob: 6d8bfc3a0012908a6b2d69156d070229de1d23ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package manview

import (
	"embed"
	_ "embed"
	"git.sr.ht/~ewy/pik/spool"
	"os"
	"os/exec"
	"strings"
	"text/template"
)

//go:embed templates
var pageTemplates embed.FS

var page = template.Must(template.ParseFS(pageTemplates, "templates/*"))

func View(fallback string) error {
	man, manErr := exec.LookPath("man")
	if manErr != nil {
		_, err := spool.Print("%v\n", fallback)
		return err
	} else {
		t := &strings.Builder{}
		d := NewData()
		err := page.Execute(t, d)
		if err != nil {
			return err
		}
		reader := strings.NewReader(t.String())
		cmd := exec.Command(man, "-l", "-")
		cmd.Stdin = reader
		cmd.Stdout = os.Stdout
		cmd.Stderr = os.Stderr
		return cmd.Run()
	}
}