diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-24 09:30:26 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-24 09:30:26 +0200 |
| commit | 9321fd3490b1739e4c84fd229a2cfef244ffdc29 (patch) | |
| tree | dc747f19d74f06e8bc4741864d007e0cd593e5eb /internal/cli/cli.go | |
| parent | b93de95dd24ff2a1d3126e6d7d00cd77530a03bf (diff) | |
| download | lectio-9321fd3490b1739e4c84fd229a2cfef244ffdc29.tar.gz lectio-9321fd3490b1739e4c84fd229a2cfef244ffdc29.zip | |
cli: pager for reading output (-P/--pager, --no-pager, config pager, $PAGER fallback); v0.3.0
Diffstat (limited to 'internal/cli/cli.go')
| -rw-r--r-- | internal/cli/cli.go | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/internal/cli/cli.go b/internal/cli/cli.go index 130683c..5ee4a34 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -38,6 +38,8 @@ Flags: -g, --lang LANG traditional lectionary language: pl|en -u, --update harvest sigla maximally to the horizon (idempotent) -C, --clean prune cached readings older than a year + -P, --pager page reading output (like git); default from config + --no-pager never page, even if config sets one -v, --version print the version and exit -h, --help this help @@ -88,7 +90,7 @@ func Run(args []string, stdin io.Reader, stdout, stderr io.Writer) int { return 2 } - var all, raw, refresh, offline, update, clean bool + var all, raw, refresh, offline, update, clean, pagerFlag, noPager bool var bibleVer, compareList, lectionary, lang string var width int @@ -118,6 +120,9 @@ func Run(args []string, stdin io.Reader, stdout, stderr io.Writer) int { fs.BoolVar(&update, "update", false, "harvest sigla maximally to the horizon") fs.BoolVar(&clean, "C", false, "prune cached readings older than a year") fs.BoolVar(&clean, "clean", false, "prune cached readings older than a year") + fs.BoolVar(&pagerFlag, "P", false, "page reading output (like git)") + fs.BoolVar(&pagerFlag, "pager", false, "page reading output (like git)") + fs.BoolVar(&noPager, "no-pager", false, "never page, even if config sets one") if err := fs.Parse(rest); err != nil { return 2 @@ -165,17 +170,34 @@ func Run(args []string, stdin io.Reader, stdout, stderr io.Writer) int { effWidth = cfg.Width } - if compareList != "" { - return renderCompare(cfg, compareList, date, effAll, raw, effWidth, refresh, stdout, stderr) + // An invalid -b must exit 2 before any pager starts -- don't page an + // error. When compareList != "", bibleVer is unused (compare wins, as + // before) so it's deliberately left unvalidated in that case too. + if bibleVer != "" && compareList == "" && !config.ValidVersion(bibleVer) { + fmt.Fprintf(stderr, "lectio: unknown version %q (want one of pl, wuj, vul, grb, drb)\n", bibleVer) + return 2 } - if bibleVer != "" { - if !config.ValidVersion(bibleVer) { - fmt.Fprintf(stderr, "lectio: unknown version %q (want one of pl, wuj, vul, grb, drb)\n", bibleVer) - return 2 + + out := stdout + finish := func() {} + if pagerRequested(pagerFlag, noPager, cfg) && isTerminalWriter(stdout) { + if o, f, ok := startPager(pagerCommand(cfg), stdout, stderr); ok { + out = o + finish = f } - return fetchAndPrint(cfg, bibleVer, date, effAll, raw, effWidth, refresh, stdout, stderr) } - return fetchAndPrint(cfg, cfg.DefaultVersion, date, effAll, raw, effWidth, refresh, stdout, stderr) + + var code int + switch { + case compareList != "": + code = renderCompare(cfg, compareList, date, effAll, raw, effWidth, refresh, out, stderr) + case bibleVer != "": + code = fetchAndPrint(cfg, bibleVer, date, effAll, raw, effWidth, refresh, out, stderr) + default: + code = fetchAndPrint(cfg, cfg.DefaultVersion, date, effAll, raw, effWidth, refresh, out, stderr) + } + finish() + return code } // wantsHelp reports whether -h/--help appears anywhere in args. |
