diff --git a/CHANGELOG.md b/CHANGELOG.md index 8304f8ced2b..2e038f1fcd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * The default editor on Windows is now `Notepad` instead of `pico`. +* Added the `ui.paginate` option to enable/disable pager usage in commands + ### New features * `jj init --git-repo` now works with bare repositories. diff --git a/cli/src/cli_util.rs b/cli/src/cli_util.rs index 7a03b258e78..4aa5a0da23b 100644 --- a/cli/src/cli_util.rs +++ b/cli/src/cli_util.rs @@ -2475,7 +2475,7 @@ fn handle_early_args( args.config_toml.push(format!(r#"ui.color="{choice}""#)); } if args.no_pager.unwrap_or_default() { - ui.set_pagination(crate::ui::PaginationChoice::No); + ui.set_pagination(crate::ui::PaginationChoice::Never); } if !args.config_toml.is_empty() { layered_configs.parse_config_args(&args.config_toml)?; diff --git a/cli/src/config-schema.json b/cli/src/config-schema.json index bbeaaca8b93..3da80bbf074 100644 --- a/cli/src/config-schema.json +++ b/cli/src/config-schema.json @@ -55,6 +55,11 @@ ], "default": "auto" }, + "paginate": { + "type": "string", + "description": "Whether or not to use a pager", + "default": "auto" + }, "pager": { "type": "string", "description": "Pager to use for displaying command output", diff --git a/cli/src/config/misc.toml b/cli/src/config/misc.toml index fd395c2dfab..dbd203eee06 100644 --- a/cli/src/config/misc.toml +++ b/cli/src/config/misc.toml @@ -5,5 +5,6 @@ # Placeholder: added by user [ui] +paginate = "auto" pager = { command = ["less", "-FRX"], env = { LESSCHARSET = "utf-8" } } log-word-wrap = false diff --git a/cli/src/ui.rs b/cli/src/ui.rs index 462f75208ea..24c2a2f4913 100644 --- a/cli/src/ui.rs +++ b/cli/src/ui.rs @@ -84,13 +84,20 @@ fn use_color(choice: ColorChoice) -> bool { } } -#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, serde::Deserialize)] +#[serde(rename_all(deserialize = "lowercase"))] pub enum PaginationChoice { - No, + Never, #[default] Auto, } +fn pagination_setting(config: &config::Config) -> Result { + config + .get::("ui.paginate") + .map_err(|err| CommandError::ConfigError(format!("Invalid `ui.paginate`: {err:?}"))) +} + fn pager_setting(config: &config::Config) -> Result { config .get::("ui.pager") @@ -117,6 +124,7 @@ impl Ui { pub fn reset(&mut self, config: &config::Config) -> Result<(), CommandError> { self.color = use_color(color_setting(config)); + self.paginate = pagination_setting(config)?; self.pager_cmd = pager_setting(config)?; self.progress_indicator = progress_indicator_setting(config); let sanitize = io::stdout().is_terminal(); @@ -132,7 +140,7 @@ impl Ui { /// Switches the output to use the pager, if allowed. #[instrument(skip_all)] pub fn request_pager(&mut self) { - if self.paginate == PaginationChoice::No { + if self.paginate == PaginationChoice::Never { return; } diff --git a/docs/config.md b/docs/config.md index 58a2673e04b..37c02c9851b 100644 --- a/docs/config.md +++ b/docs/config.md @@ -267,6 +267,15 @@ a `$`): `less -FRX` is the default pager in the absence of any other setting. +Additionally, paging behavior can be toggled via `ui.paginate` like so: + +```toml +# Enable pagination where required (default) +ui.paginate = "auto" +# Disable all pagination, equivalent to using --no-pager +ui.paginate = "never" +``` + ### Processing contents to be paged If you'd like to pass the output through a formatter e.g.