Skip to main content

Module pager

Module pager 

Source
Expand description

Pager integration for long output (P2-29)

Provides automatic paging when output exceeds terminal height. Uses external pagers like less, bat, or more.

§Features

  • Auto-detection: Pages only when stdout is a TTY and output exceeds threshold
  • Capped buffering: Max 1MB buffer, then streams to pager
  • Cross-platform: Uses terminal_size crate for terminal dimensions
  • Unicode-aware: Uses unicode-width for accurate line-wrap calculation
  • Safe command parsing: Uses shlex for proper argument handling

§Example

use sqry_cli::output::pager::{BufferedOutput, PagerConfig, PagerExitStatus, PagerMode};

let config = PagerConfig {
    enabled: PagerMode::Auto,
    ..Default::default()
};

let mut output = BufferedOutput::new(config);
output.write("Hello, world!\n")?;

// Finalize output - returns pager exit status
let status = output.finish()?;
if let Some(exit_code) = status.exit_code() {
    std::process::exit(exit_code);
}

Structs§

BufferedOutput
Buffered output with capped streaming for auto mode
PagerConfig
Configuration for pager behavior
PagerDecision
Determines whether to use pager for current output
PagerWriter
Manages output to pager process

Enums§

PagerExitStatus
Pager exit status for distinguishing normal exits from signal terminations
PagerMode
Pager mode selection

Functions§

count_displayed_rows
Count displayed rows accounting for line wrapping