summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorewy <ewy0@protonmail.com>2026-06-01 19:37:34 +0200
committerewy <ewy0@protonmail.com>2026-06-01 19:37:34 +0200
commit3d46b9546e1ccf131ce4dbcbfc12f6e37fa301ea (patch)
tree54bd9343fe51734b7e2377a844065f317bc51cc3
parent46d032cd21b0e8e2c94a32333d3805ec76980cca (diff)
default to manpage view for help
-rw-r--r--completion/completion.go4
-rw-r--r--indexers/pikdex/meta_test.go8
-rw-r--r--man/man_test.go2
-rw-r--r--man/manview/data.go (renamed from man/data.go)2
-rw-r--r--man/manview/help.txt (renamed from man/help.txt)0
-rw-r--r--man/manview/manview.go36
-rw-r--r--man/manview/templates/pik.1.man.tmpl (renamed from man/templates/pik.1.man.tmpl)0
-rw-r--r--man/manview/version.txt (renamed from man/version.txt)0
-rw-r--r--man/view.go (renamed from man/man.go)7
-rw-r--r--modes.go18
10 files changed, 54 insertions, 23 deletions
diff --git a/completion/completion.go b/completion/completion.go
index 0fbe877..6fc719f 100644
--- a/completion/completion.go
+++ b/completion/completion.go
@@ -54,7 +54,7 @@ func Add(shell string) *spool.ExitCode {
return &spool.CompletionFailure
}
successMessage(shell, f)
- return nil
+ return &spool.Success
}
func successMessage(shell string, file string) {
@@ -65,5 +65,5 @@ func successMessage(shell string, file string) {
// because it is baked in with the program it should always be version-appropriate
func Echo() *spool.ExitCode {
_, _ = spool.Print("%s", completionCode)
- return nil
+ return &spool.Success
}
diff --git a/indexers/pikdex/meta_test.go b/indexers/pikdex/meta_test.go
index e04815f..8980d8c 100644
--- a/indexers/pikdex/meta_test.go
+++ b/indexers/pikdex/meta_test.go
@@ -11,7 +11,7 @@ func TestContentLines(t *testing.T) {
in := `asdf
hjkl`
result := contentLines(in)
- assert.Equal(t, "asdf", "hjkl", result)
+ assert.Equal(t, []string{"asdf", "hjkl"}, result)
}
func TestContentLines_EmptyLine(t *testing.T) {
@@ -19,13 +19,13 @@ func TestContentLines_EmptyLine(t *testing.T) {
hjkl`
result := contentLines(in)
- assert.Equal(t, "asdf", "hjkl", result)
+ assert.Equal(t, []string{"asdf", "hjkl"}, result)
}
func TestContentLines_Empty(t *testing.T) {
in := ``
result := contentLines(in)
- assert.Equal(t, nil, result)
+ assert.Len(t, result, 0)
}
func TestContentLines_Comment(t *testing.T) {
@@ -35,5 +35,5 @@ asdf
# iuyyiuoui
hjkl`
result := contentLines(in)
- assert.Equal(t, "asdf", "hjkl", result)
+ assert.Equal(t, []string{"asdf", "hjkl"}, result)
}
diff --git a/man/man_test.go b/man/man_test.go
index 4b48c0f..7643677 100644
--- a/man/man_test.go
+++ b/man/man_test.go
@@ -14,5 +14,5 @@ func TestMan(t *testing.T) {
err := pflag.Set(manFlagName, d)
assert.NoError(t, err)
assert.NotPanics(t, main)
- assert.FileExists(t, filepath.Join(d, "pik.1.man"))
+ assert.FileExists(t, filepath.Join(d, "pik.1"))
}
diff --git a/man/data.go b/man/manview/data.go
index 322da8f..7e42fcc 100644
--- a/man/data.go
+++ b/man/manview/data.go
@@ -1,4 +1,4 @@
-package main
+package manview
import (
_ "embed"
diff --git a/man/help.txt b/man/manview/help.txt
index 8c7e943..8c7e943 100644
--- a/man/help.txt
+++ b/man/manview/help.txt
diff --git a/man/manview/manview.go b/man/manview/manview.go
new file mode 100644
index 0000000..777f2cd
--- /dev/null
+++ b/man/manview/manview.go
@@ -0,0 +1,36 @@
+package manview
+
+import (
+ "embed"
+ _ "embed"
+ "github.com/ewy1/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{}
+ err := page.Execute(t, NewData())
+ 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()
+ }
+}
diff --git a/man/templates/pik.1.man.tmpl b/man/manview/templates/pik.1.man.tmpl
index 53f1cfd..53f1cfd 100644
--- a/man/templates/pik.1.man.tmpl
+++ b/man/manview/templates/pik.1.man.tmpl
diff --git a/man/version.txt b/man/manview/version.txt
index 3b2e7a0..3b2e7a0 100644
--- a/man/version.txt
+++ b/man/manview/version.txt
diff --git a/man/man.go b/man/view.go
index 49018ed..bb4aac4 100644
--- a/man/man.go
+++ b/man/view.go
@@ -2,6 +2,7 @@ package main
import (
"embed"
+ "github.com/ewy1/pik/man/manview"
"github.com/ewy1/pik/spool"
"github.com/spf13/pflag"
"os"
@@ -10,7 +11,7 @@ import (
"text/template"
)
-//go:embed templates
+//go:embed manview/templates
var templates embed.FS
var ManOutput = pflag.String(manFlagName, "out", "directory to write man pages to (gets created)")
@@ -22,7 +23,7 @@ const templateExtension = ".tmpl"
func main() {
pflag.Parse()
- tmpl, err := template.ParseFS(templates, filepath.Join(templateDir, "*"))
+ tmpl, err := template.ParseFS(templates, "*/*/*.tmpl")
if err != nil {
_, _ = spool.Panic(spool.ManFailure, "%v\n", err)
return
@@ -31,7 +32,7 @@ func main() {
if err != nil {
_, _ = spool.Panic(spool.ManFailure, "%v\n", err)
}
- d := NewData()
+ d := manview.NewData()
for _, t := range tmpl.Templates() {
if !strings.HasSuffix(t.Name(), manExtension+templateExtension) {
continue
diff --git a/modes.go b/modes.go
index b8da9b0..ec0545f 100644
--- a/modes.go
+++ b/modes.go
@@ -2,9 +2,9 @@ package main
import (
_ "embed"
- "errors"
"github.com/ewy1/pik/completion"
"github.com/ewy1/pik/flags"
+ "github.com/ewy1/pik/man/manview"
"github.com/ewy1/pik/model"
"github.com/ewy1/pik/paths"
"github.com/ewy1/pik/run"
@@ -18,14 +18,10 @@ import (
// ModeMap maps flags to specific operation modes
type ModeMap[T any] map[*bool]T
-// Continue can be returned as an error to continue program flow
-var Continue = errors.New("not an error; continue flow")
-var Success = errors.New("not an error; finished operations")
-
-//go:embed man/help.txt
+//go:embed man/manview/help.txt
var help string
-//go:embed man/version.txt
+//go:embed man/manview/version.txt
var version string
// Traverse checks the entries of the map. If any flags are set on,
@@ -55,8 +51,8 @@ var uninitializedModes = ModeMap[func() *spool.ExitCode]{
return completion.Echo()
},
flags.Help: func() *spool.ExitCode {
- _, _ = spool.Print("%s\n", help)
- return nil
+ _ = manview.View(help)
+ return &spool.Success
},
}
@@ -74,7 +70,7 @@ var statelessModes = ModeMap[func() *spool.ExitCode]{
flags.Profile: func() *spool.ExitCode {
fd, err := os.Create("pik-profile.out")
if err != nil {
- return &spool.FatalWriteFailure
+ return &spool.ProfilingFailure
}
runtime.SetCPUProfileRate(1000)
err = pprof.StartCPUProfile(profileFd)
@@ -86,8 +82,6 @@ var statelessModes = ModeMap[func() *spool.ExitCode]{
},
}
-var NoTargetsError = errors.New("no targets or sources to list")
-
// statefulModes are program modes which require a built state to be executed
var statefulModes = ModeMap[func(st *model.State) *spool.ExitCode]{
flags.List: func(st *model.State) *spool.ExitCode {