Skip to content

Commit

Permalink
configs: add the ability to disable paging via ui.paginate
Browse files Browse the repository at this point in the history
  • Loading branch information
mbStavola committed Aug 11, 2023
1 parent abc7312 commit 723ac93
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 4 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion cli/src/cli_util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)?;
Expand Down
5 changes: 5 additions & 0 deletions cli/src/config-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
1 change: 1 addition & 0 deletions cli/src/config/misc.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
# Placeholder: added by user

[ui]
paginate = "auto"
pager = { command = ["less", "-FRX"], env = { LESSCHARSET = "utf-8" } }
log-word-wrap = false
14 changes: 11 additions & 3 deletions cli/src/ui.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<PaginationChoice, CommandError> {
config
.get::<PaginationChoice>("ui.paginate")
.map_err(|err| CommandError::ConfigError(format!("Invalid `ui.paginate`: {err:?}")))
}

fn pager_setting(config: &config::Config) -> Result<CommandNameAndArgs, CommandError> {
config
.get::<CommandNameAndArgs>("ui.pager")
Expand All @@ -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();
Expand All @@ -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;
}

Expand Down
9 changes: 9 additions & 0 deletions docs/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit 723ac93

Please sign in to comment.