diff options
| -rw-r--r-- | completion/completion.go | 4 | ||||
| -rw-r--r-- | indexers/pikdex/meta_test.go | 8 | ||||
| -rw-r--r-- | man/man_test.go | 2 | ||||
| -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.go | 36 | ||||
| -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.go | 18 |
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 @@ -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 @@ -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 { |
