page the ? output

The long answer is now well past a screen, so it scrolls the question off the top
and the reader lands at a prompt having lost what they were choosing between.
Piped through a pager, so it is read a screen at a time and the menu is redrawn
underneath it afterwards.

`more` rather than `less`: it exits at the end of the file instead of sitting
there waiting to be quit, which is right for something asked for once.

Only when stdout is a terminal. Redirected or piped — a transcript, a log, the
test harness — it comes through whole, since a pager there either blocks or
mangles the output.

Applied to confirm()'s help hook as well, so every ? in the script pages, not
just this one.

Verified both ways: driven through a pty it shows --More--, and with output
piped all four help sections come through in full.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-12 20:27:00 +00:00
co-authored by Claude Opus 5
parent 85d8fa62f1
commit 22a661131d
2 changed files with 17 additions and 2 deletions
+16 -1
View File
@@ -215,6 +215,21 @@ prompt_value() {
fi fi
} }
# Show long output a screen at a time.
#
# Only when there is a terminal to page on: with output redirected or piped —
# a transcript, a log, the test harness — it has to come through whole, and a
# pager would either block or mangle it. `more` rather than `less` because it
# exits at the end of the file instead of sitting there waiting to be quit,
# which is what you want for something you asked to read once.
page() {
if [[ -t 1 ]] && command -v more &>/dev/null; then
more
else
cat
fi
}
# Ask before acting. Every section that changes the machine goes through this, so # Ask before acting. Every section that changes the machine goes through this, so
# a run is a sequence of things you agreed to rather than a wall of output you # a run is a sequence of things you agreed to rather than a wall of output you
# read afterwards to find out what happened. # read afterwards to find out what happened.
@@ -255,7 +270,7 @@ confirm() {
"?") "?")
if [[ -n "$help_fn" ]]; then if [[ -n "$help_fn" ]]; then
echo "" echo ""
"$help_fn" "$help_fn" | page
echo "" echo ""
else else
warn "Answer y or n." warn "Answer y or n."
+1 -1
View File
@@ -470,7 +470,7 @@ if ! skip; then
3) TS_PLANE="tailscale" ;; 3) TS_PLANE="tailscale" ;;
"?") "?")
echo "" echo ""
tailscale_networks_help tailscale_networks_help | page
echo "" echo ""
tailscale_network_menu tailscale_network_menu
;; ;;