Skip to content

Add --pager=builtin using the Minus library#3402

Merged
keith-hall merged 3 commits intosharkdp:masterfrom
academician:minus-integration
Sep 20, 2025
Merged

Add --pager=builtin using the Minus library#3402
keith-hall merged 3 commits intosharkdp:masterfrom
academician:minus-integration

Conversation

@academician
Copy link
Contributor

This adds a new value for the --pager option called "builtin", which uses the the minus pager library. The Minus crate implements a pure Rust terminal pager with fairly minimal dependencies.

There was a suggestion on the original ticket to change "builtin" to "builtin-minus", but for now I'm leaving it as-is; we can always add "builtin-minus" and "builtin-other" if we add other pagers.

Another future work item might be to use minus by default if less is not found in the path. We could also choose to use the built-in pager by default if PAGER and BAT_PAGER aren't set.

Changes:

  • When the "pager" feature is enabled, includes minus as a dependency
  • If --pager or BAT_PAGER are set to "builtin", uses minus for paging
  • Update documentation, help text, and shell completions
  • Add changelog entry

Closes #1540

@academician academician force-pushed the minus-integration branch 2 times, most recently from 401e18b to b37f89f Compare September 9, 2025 20:25
@Enselic
Copy link
Collaborator

Enselic commented Sep 10, 2025

I did a quick skim-through and this looks great! (Not sure when I will get time for a detailed look. I also want to give other maintainers some time to chime in if they want.)

Copy link
Collaborator

@keith-hall keith-hall left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, I gave it a quick try and it looks good. I wonder if we should somehow link to minus documentation in various places, in case it uses different keyboard shortcuts or has different functionality to less, to make it easier for users to get started and discover features.
Also, I think it would be nice to make a release after merging this, and highlight it in the release notes fairly prominently to encourage users to try it.

@Enselic
Copy link
Collaborator

Enselic commented Sep 15, 2025

@keith-hall feel free to merge this if you're happy with it (I don't need to take a detailed look if this looks good to you)

let _ = command.wait();
}
OutputType::BuiltinPager(ref mut pager) => {
if pager.handle.is_some() {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are there any circumstances where the handle would be None?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, it will always be Some, so I suppose this check strictly necessary and we could unwrap() or expect() instead. I used an Option here because we have to take ownership of the interior value on the line below, but I'm realizing now that OnceCell would be more appropriate, so I could change it to that. It wouldn't make this code much different, though.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will leave it up to your discretion, which is the better approach. If you are happy with the current code, we can leave it as is 🙂

@keith-hall keith-hall merged commit 9d003dd into sharkdp:master Sep 20, 2025
24 checks passed
@academician academician deleted the minus-integration branch October 6, 2025 19:11
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Oct 22, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [sharkdp/bat](https://github.com/sharkdp/bat) | minor | `v0.25.0` -> `v0.26.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>sharkdp/bat (sharkdp/bat)</summary>

### [`v0.26.0`](https://github.com/sharkdp/bat/blob/HEAD/CHANGELOG.md#v0260)

[Compare Source](sharkdp/bat@v0.25.0...v0.26.0)

#### Features

- Add build for windows/ARM64 platform. [#&#8203;3190](sharkdp/bat#3190) ([@&#8203;alcroito](https://github.com/alcroito))
- Add paging to `--list-themes`, see MR [#&#8203;3239](sharkdp/bat#3239) ([@&#8203;einfachIrgendwer0815](https://github.com/einfachIrgendwer0815))
- Support negative relative line ranges, e.g. `bat -r :-10` / `bat -r='-10:'`, see [#&#8203;3068](sharkdp/bat#3068) ([@&#8203;ajesipow](https://github.com/ajesipow))
- Support context in line ranges, e.g. `bat -r 30::5` /  `bat -r 30:40:5`, see [#&#8203;3345](sharkdp/bat#3345) ([@&#8203;cavanaug](https://github.com/cavanaug))
- Add built-in 'minus' pager, e.g. `bat --pager=builtin` see MR [#&#8203;3402](sharkdp/bat#3402) ([@&#8203;academician](https://github.com/academician))

#### Bugfixes

- Fix UTF-8 BOM not being stripped for syntax detection, see [#&#8203;3314](sharkdp/bat#3314) ([@&#8203;krikera](https://github.com/krikera))
- Fix `BAT_THEME_DARK` and `BAT_THEME_LIGHT` being ignored, see issue [#&#8203;3171](sharkdp/bat#3171) and MR [#&#8203;3168](sharkdp/bat#3168) ([@&#8203;bash](https://github.com/bash))
- Prevent `--list-themes` from outputting default theme info to stdout when it is piped, see [#&#8203;3189](sharkdp/bat#3189) ([@&#8203;einfachIrgendwer0815](https://github.com/einfachIrgendwer0815))
- Rename some submodules to fix Dependabot submodule updates, see issue [#&#8203;3198](sharkdp/bat#3198) and MR [#&#8203;3201](sharkdp/bat#3201) ([@&#8203;victor-gp](https://github.com/victor-gp))
- Make highlight tests fail when new syntaxes don't have fixtures MR [#&#8203;3255](sharkdp/bat#3255) ([@&#8203;dan-hipschman](https://github.com/dan-hipschman))
- Fix crash for multibyte characters in file path, see issue [#&#8203;3230](sharkdp/bat#3230) and MR [#&#8203;3245](sharkdp/bat#3245) ([@&#8203;HSM95](https://github.com/HSM95))
- Add missing mappings for various bash/zsh files, see MR [#&#8203;3262](sharkdp/bat#3262) ([@&#8203;AdamGaskins](https://github.com/AdamGaskins))
- Send all bat errors to stderr by default, see [#&#8203;3336](sharkdp/bat#3336) ([@&#8203;JerryImMouse](https://github.com/JerryImMouse))
- Make --map-syntax target case insensitive to match --language, see [#&#8203;3206](sharkdp/bat#3206) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Correctly determine the end of the line in UTF16LE/BE input [#&#8203;3369](sharkdp/bat#3369) ([@&#8203;keith-hall](https://github.com/keith-hall))
- `--style=changes` no longer prints a two-space indent when the file is unmodified, see issue [#&#8203;2710](sharkdp/bat#2710) and MR [#&#8203;3406](sharkdp/bat#3406) ([@&#8203;jyn514](https://github.com/jyn514))
- Add missing shell completions, see [#&#8203;3411](sharkdp/bat#3411) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Execute help/version/diagnostic commands even with invalid config/arguments present, see [#&#8203;3414](sharkdp/bat#3414) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Fixed line numbers (`-n`) and style components not printing when piping output, see issue [#&#8203;2935](sharkdp/bat#2935) and MR [#&#8203;3438](sharkdp/bat#3438) ([@&#8203;lmmx](https://github.com/lmmx))

#### Other

- Update base16 README links to community driven base16 work [#&#8203;2871](sharkdp/bat#2871) ([@&#8203;JamyGolden](https://github.com/JamyGolden))
- Work around build failures when building `bat` from vendored sources [#&#8203;3179](sharkdp/bat#3179) ([@&#8203;dtolnay](https://github.com/dtolnay))
- CICD: Stop building for x86\_64-pc-windows-gnu which fails [#&#8203;3261](sharkdp/bat#3261) (Enselic)
- CICD: replace windows-2019 runners with windows-2025 [#&#8203;3339](sharkdp/bat#3339) ([@&#8203;cyqsimon](https://github.com/cyqsimon))
- Build script: replace string-based codegen with quote-based codegen [#&#8203;3340](sharkdp/bat#3340) ([@&#8203;cyqsimon](https://github.com/cyqsimon))
- Improve code coverage of `--list-languages` parameter [#&#8203;2942](sharkdp/bat#2942) ([@&#8203;sblondon](https://github.com/sblondon))
- Only start offload worker thread when there's more than 1 core [#&#8203;2956](sharkdp/bat#2956) ([@&#8203;cyqsimon](https://github.com/cyqsimon))
- Update terminal-colorsaurus (the library used for dark/light detection) to 1.0, see [#&#8203;3347](sharkdp/bat#3347) ([@&#8203;bash](https://github.com/bash))
- Update console dependency to 0.16, see [#&#8203;3351](sharkdp/bat#3351) ([@&#8203;musicinmybrain](https://github.com/musicinmybrain))
- Fixed some typos [#&#8203;3244](sharkdp/bat#3244) ([@&#8203;ssbarnea](https://github.com/ssbarnea))
- Update onig\_sys dependency to 69.9.1 to fix a gcc build failure [#&#8203;3400](sharkdp/bat#3400) ([@&#8203;CosmicHorrorDev](https://github.com/CosmicHorrorDev))
- Add a cargo feature (`vendored-libgit2`) to build with vendored libgit2 version without depending on the system's one [#&#8203;3426](sharkdp/bat#3426) ([@&#8203;0x61nas](https://github.com/0x61nas))
- Update syntect dependency to v5.3.0 to fix a few minor bugs, see [#&#8203;3410](sharkdp/bat#3410) ([@&#8203;keith-hall](https://github.com/keith-hall))

#### Syntaxes

- Add syntax mapping for `paru` configuration files [#&#8203;3182](sharkdp/bat#3182) ([@&#8203;cyqsimon](https://github.com/cyqsimon))
- Add support for [Idris 2 programming language](https://www.idris-lang.org/) [#&#8203;3150](sharkdp/bat#3150) ([@&#8203;buzden](https://github.com/buzden))
- Add syntax mapping for `nix`'s '`flake.lock` lockfiles [#&#8203;3196](sharkdp/bat#3196) ([@&#8203;odilf](https://github.com/odilf))
- Improvements to CSV/TSV highlighting, with autodetection of delimiter and support for TSV files, see [#&#8203;3186](sharkdp/bat#3186) ([@&#8203;keith-](https://github.com/keith-)
- Improve (Sys)log error highlighting, see [#&#8203;3205](sharkdp/bat#3205) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Map `ndjson` extension to JSON syntax, see [#&#8203;3209](sharkdp/bat#3209) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Map files with `csproj`, `vbproj`, `props` and `targets` extensions to XML syntax, see [#&#8203;3213](sharkdp/bat#3213) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Add debsources syntax to highlight `/etc/apt/sources.list` files, see [#&#8203;3215](sharkdp/bat#3215) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Add syntax definition and test file for GDScript highlighting, see [#&#8203;3236](sharkdp/bat#3236) ([@&#8203;chetanjangir0](https://github.com/chetanjangir0))
- Add syntax test file for Odin highlighting, see [#&#8203;3241](sharkdp/bat#3241) ([@&#8203;chetanjangir0](https://github.com/chetanjangir0))
- Update quadlet syntax mapping rules to cover quadlets in subdirectories [#&#8203;3299](sharkdp/bat#3299) ([@&#8203;cyqsimon](https://github.com/cyqsimon))
- Add syntax Typst [#&#8203;3300](sharkdp/bat#3300) ([@&#8203;cskeeters](https://github.com/cskeeters))
- Map `.mill` files to Scala syntax for Mill build tool configuration files [#&#8203;3311](sharkdp/bat#3311) ([@&#8203;krikera](https://github.com/krikera))
- Add syntax highlighting for VHDL, see [#&#8203;3337](sharkdp/bat#3337) ([@&#8203;JerryImMouse](https://github.com/JerryImMouse))
- Add syntax mapping for certbot certificate configuration [#&#8203;3338](sharkdp/bat#3338) ([@&#8203;cyqsimon](https://github.com/cyqsimon))
- Update Lean syntax from Lean 3 to Lean 4 [#&#8203;3322](sharkdp/bat#3322) ([@&#8203;YDX-2147483647](https://github.com/YDX-2147483647))
- Map `.flatpakref` and `.flatpakrepo` files to INI syntax [#&#8203;3353](sharkdp/bat#3353) ([@&#8203;Ferenc-](https://github.com/Ferenc-))
- Update hosts syntax [#&#8203;3368](sharkdp/bat#3368) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Map `.kshrc` files to Bash syntax [#&#8203;3364](sharkdp/bat#3364) ([@&#8203;ritoban23](https://github.com/ritoban23))
- Map `/var/log/dmesg` files to Syslog syntax [#&#8203;3412](sharkdp/bat#3412) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Add syntax definition and test file for Go modules(`go.mod` and `go.sum`) highlighting, see [#&#8203;3424](sharkdp/bat#3424) ([@&#8203;DarkMatter-999](https://github.com/DarkMatter-999))
- Syntax highlighting for typescript code blocks within Markdown files, see [#&#8203;3435](sharkdp/bat#3435) ([@&#8203;MuntasirSZN](https://github.com/MuntasirSZN))

#### Themes

- Add Catppuccin, see [#&#8203;3317](sharkdp/bat#3317) ([@&#8203;SchweGELBin](https://github.com/SchweGELBin))
- Updated Catppuccin, see [#&#8203;3333](sharkdp/bat#3333) ([@&#8203;SchweGELBin](https://github.com/SchweGELBin))
- Updated gruvbox, see [#&#8203;3372](sharkdp/bat#3372) ([@&#8203;Nicholas42](https://github.com/Nicholas42))
- Updated GitHub theme, see [#&#8203;3382](sharkdp/bat#3382) ([@&#8203;CosmicHorrorDev](https://github.com/CosmicHorrorDev))
- Updated ANSI theme to highlight JSON object keys differently from values, see [#&#8203;3413](sharkdp/bat#3413) ([@&#8203;keith-hall](https://github.com/keith-hall))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNTEuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE1Mi45IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Use minus as a paging library

3 participants