use crate::{init, utils};
use crate::error::AlternateScreenPagingError;
use crate::Pager;
use crossterm::tty::IsTty;
use std::io::{self, Write};
#[derive(Debug, thiserror::Error)]
pub enum PageAllError {
#[error(transparent)]
Io(#[from] std::io::Error),
#[error(transparent)]
Paging(#[from] AlternateScreenPagingError),
#[error("Failed to determine terminal size")]
TerminalSize(crossterm::ErrorKind),
}
#[cfg_attr(
feature = "async_std_lib",
doc = "- [`async_std_updating`](crate::async_std_updating)\n"
)]
#[cfg_attr(
feature = "tokio_lib",
doc = "- [`tokio_updating`](crate::tokio_updating)\n"
)]
#[cfg_attr(
not(any(feature = "async_std_lib", feature = "tokio_lib")),
doc = "- Asynchronous features are disabled, see [here](crate#features) for more information.\n"
)]
#[cfg_attr(docsrs, doc(cfg(feature = "static_output")))]
pub fn page_all(mut p: Pager) -> Result<(), PageAllError> {
let stdout = io::stdout();
let line_count = p.num_lines();
{
if !stdout.is_tty() {
let mut out = stdout.lock();
utils::write_lines(&mut out, &mut p)?;
out.flush()?;
return Ok(());
}
}
{
if !p.run_no_overflow && p.rows > line_count {
let mut out = stdout.lock();
utils::write_lines(&mut out, &mut p)?;
out.flush()?;
} else {
init::static_paging(p)?;
}
Ok(())
}
}