forked from mirrors/jj
configs: add the ability to disable paging via ui.paginate
This commit is contained in:
parent
083e971dfb
commit
4760b565c5
6 changed files with 36 additions and 6 deletions
|
@ -53,6 +53,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
* `jj log`/`obslog`/`op log` now supports `--limit N` option to show the first
|
||||
`N` entries.
|
||||
|
||||
* Added the `ui.paginate` option to enable/disable pager usage in commands
|
||||
|
||||
### Fixed bugs
|
||||
|
||||
* SSH authentication could hang when ssh-agent couldn't be reached
|
||||
|
|
|
@ -2488,7 +2488,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)?;
|
||||
|
|
|
@ -55,6 +55,15 @@
|
|||
],
|
||||
"default": "auto"
|
||||
},
|
||||
"paginate": {
|
||||
"type": "string",
|
||||
"description": "Whether or not to use a pager",
|
||||
"enum": [
|
||||
"never",
|
||||
"auto"
|
||||
],
|
||||
"default": "auto"
|
||||
},
|
||||
"pager": {
|
||||
"type": "string",
|
||||
"description": "Pager to use for displaying command output",
|
||||
|
|
|
@ -5,5 +5,6 @@
|
|||
# Placeholder: added by user
|
||||
|
||||
[ui]
|
||||
paginate = "auto"
|
||||
pager = { command = ["less", "-FRX"], env = { LESSCHARSET = "utf-8" } }
|
||||
log-word-wrap = false
|
||||
|
|
|
@ -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 = "kebab-case"))]
|
||||
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")
|
||||
|
@ -109,7 +116,7 @@ impl Ui {
|
|||
color,
|
||||
formatter_factory,
|
||||
pager_cmd: pager_setting(config)?,
|
||||
paginate: PaginationChoice::Auto,
|
||||
paginate: pagination_setting(config)?,
|
||||
progress_indicator,
|
||||
output: UiOutput::new_terminal(),
|
||||
})
|
||||
|
@ -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,8 +140,9 @@ 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 {
|
||||
return;
|
||||
match self.paginate {
|
||||
PaginationChoice::Never => return,
|
||||
PaginationChoice::Auto => {}
|
||||
}
|
||||
|
||||
match self.output {
|
||||
|
|
|
@ -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 for commands that support it (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.
|
||||
|
|
Loading…
Reference in a new issue