mirror of
https://github.com/cheat/cheat.git
synced 2026-03-07 11:13:33 +01:00
Bug fixes: - Fix inverted pager detection logic (returned error instead of path) - Fix repo.Clone ignoring destination directory parameter - Fix sheet loading using append on pre-sized slices - Clean up partial files on copy failure - Trim whitespace from editor config Security: - Add path traversal protection for cheatsheet names Performance: - Move regex compilation outside search loop - Replace string concatenation with strings.Join in search Build: - Remove go:generate; embed config and usage as string literals - Parallelize release builds - Add fuzz testing infrastructure Testing: - Improve test coverage from 38.9% to 50.2% - Add fuzz tests for search, filter, tags, and validation Documentation: - Fix inaccurate code examples in HACKING.md - Add missing --conf and --all options to man page - Add ADRs for path traversal, env parsing, and search parallelization - Update CONTRIBUTING.md to reflect project policy Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
42 lines
914 B
Go
42 lines
914 B
Go
package display
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
|
|
"github.com/cheat/cheat/internal/config"
|
|
)
|
|
|
|
// Write writes output either directly to stdout, or through a pager,
|
|
// depending upon configuration.
|
|
func Write(out string, conf config.Config) {
|
|
// if no pager was configured, print the output to stdout and exit
|
|
if conf.Pager == "" {
|
|
fmt.Print(out)
|
|
os.Exit(0)
|
|
}
|
|
|
|
// otherwise, pipe output through the pager
|
|
writeToPager(out, conf)
|
|
}
|
|
|
|
// writeToPager writes output through a pager command
|
|
func writeToPager(out string, conf config.Config) {
|
|
parts := strings.Split(conf.Pager, " ")
|
|
pager := parts[0]
|
|
args := parts[1:]
|
|
|
|
// configure the pager
|
|
cmd := exec.Command(pager, args...)
|
|
cmd.Stdin = strings.NewReader(out)
|
|
cmd.Stdout = os.Stdout
|
|
|
|
// run the pager and handle errors
|
|
if err := cmd.Run(); err != nil {
|
|
fmt.Fprintf(os.Stderr, "failed to write to pager: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|