From 840ab460090de2c361c5f208bf2d08fa20f32a4d Mon Sep 17 00:00:00 2001 From: Jon Parise Date: Mon, 30 Mar 2026 10:53:53 -0400 Subject: [PATCH] cli: also recognize $GHOSTTY_PAGER When defined, GHOSTTY_PAGER takes precedence over PAGER. If either of those variables is set to an empty value, paging is disabled. --- src/cli/Pager.zig | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/cli/Pager.zig b/src/cli/Pager.zig index 701925228..247c998e1 100644 --- a/src/cli/Pager.zig +++ b/src/cli/Pager.zig @@ -1,7 +1,9 @@ //! A pager wraps output to an external pager program (like `less`) when -//! stdout is a TTY. The pager command is determined by `$PAGER`, falling -//! back to `less` if `$PAGER` isn't set. +//! stdout is a TTY. The pager command is resolved as: //! +//! `$GHOSTTY_PAGER` > `$PAGER` > `less` +//! +//! Setting either env var to an empty string disables paging. //! If stdout is not a TTY, writes go directly to stdout. const Pager = @This(); const std = @import("std"); @@ -51,14 +53,18 @@ fn initPager(alloc: Allocator) ?std.process.Child { const stdout_file: std.fs.File = .stdout(); if (!stdout_file.isTty()) return null; - // Resolve the pager command: $PAGER > "less". - // An empty $PAGER disables paging. - const env_result = internal_os.getenv(alloc, "PAGER") catch null; + // Resolve the pager command: $GHOSTTY_PAGER > $PAGER > `less`. + // An empty value for either env var disables paging. + const ghostty_var = internal_os.getenv(alloc, "GHOSTTY_PAGER") catch null; + defer if (ghostty_var) |v| v.deinit(alloc); + const pager_var = internal_os.getenv(alloc, "PAGER") catch null; + defer if (pager_var) |v| v.deinit(alloc); + const cmd: ?[]const u8 = cmd: { - const r = env_result orelse break :cmd "less"; - break :cmd if (r.value.len > 0) r.value else null; + if (ghostty_var) |v| break :cmd if (v.value.len > 0) v.value else null; + if (pager_var) |v| break :cmd if (v.value.len > 0) v.value else null; + break :cmd "less"; }; - defer if (env_result) |r| r.deinit(alloc); if (cmd == null) return null;