summaryrefslogtreecommitdiff
path: root/internal/cli/cli.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/cli/cli.go')
-rw-r--r--internal/cli/cli.go40
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.