From 1faf9f1b03d7d257307f6ea0500063e4be939d17 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Fri, 24 Jul 2026 09:32:44 +0200 Subject: cli: keep real terminal width when paging; validate -c list before pager --- internal/cli/cli.go | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'internal/cli/cli.go') diff --git a/internal/cli/cli.go b/internal/cli/cli.go index 5ee4a34..253e718 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -169,14 +169,30 @@ func Run(args []string, stdin io.Reader, stdout, stderr io.Writer) int { if effWidth == 0 { effWidth = cfg.Width } + if effWidth == 0 { + // Detect the real terminal width now, from stdout, before it may be + // replaced by the pager's pipe below -- otherwise paging would wrap at + // the default width instead of the terminal's. + if tw := termWidth(stdout); tw > 0 { + effWidth = tw + } + } - // 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. + // Validate versions 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. 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 compareList != "" { + for _, v := range strings.Split(compareList, ",") { + if v = strings.TrimSpace(v); v != "" && !config.ValidVersion(v) { + fmt.Fprintf(stderr, "lectio: unknown version %q (want one of pl, wuj, vul, grb, drb)\n", v) + return 2 + } + } + } out := stdout finish := func() {} -- cgit v1.3