mirror of
https://github.com/sharkdp/bat.git
synced 2025-01-19 03:58:18 +01:00
Merge pull request #3126 from einfachIrgendwer0815/feature/included_completions
Add `--completion <SHELL>` to provide shell completions
This commit is contained in:
commit
0cde7167d6
@ -11,6 +11,7 @@
|
|||||||
- Add or remove individual style components without replacing all styles #2929 (@eth-p)
|
- Add or remove individual style components without replacing all styles #2929 (@eth-p)
|
||||||
- Automatically choose theme based on the terminal's color scheme, see #2896 (@bash)
|
- Automatically choose theme based on the terminal's color scheme, see #2896 (@bash)
|
||||||
- Add option `--binary=as-text` for printing binary content, see issue #2974 and PR #2976 (@einfachIrgendwer0815)
|
- Add option `--binary=as-text` for printing binary content, see issue #2974 and PR #2976 (@einfachIrgendwer0815)
|
||||||
|
- Make shell completions available via `--completion <shell>`, see issue #2057 and PR #3126 (@einfachIrgendwer0815)
|
||||||
|
|
||||||
## Bugfixes
|
## Bugfixes
|
||||||
|
|
||||||
|
@ -465,6 +465,12 @@ cargo install --locked bat
|
|||||||
Note that additional files like the man page or shell completion
|
Note that additional files like the man page or shell completion
|
||||||
files can not be installed in this way. They will be generated by `cargo` and should be available in the cargo target folder (under `build`).
|
files can not be installed in this way. They will be generated by `cargo` and should be available in the cargo target folder (under `build`).
|
||||||
|
|
||||||
|
Shell completions are also available by running:
|
||||||
|
```bash
|
||||||
|
bat --completion <shell>
|
||||||
|
# see --help for supported shells
|
||||||
|
```
|
||||||
|
|
||||||
## Customization
|
## Customization
|
||||||
|
|
||||||
### Highlighting theme
|
### Highlighting theme
|
||||||
|
@ -63,5 +63,22 @@ pub fn gen_man_and_comp() -> anyhow::Result<()> {
|
|||||||
out_dir.join("assets/completions/bat.zsh"),
|
out_dir.join("assets/completions/bat.zsh"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"cargo:rustc-env=BAT_GENERATED_COMPLETION_BASH={}",
|
||||||
|
out_dir.join("assets/completions/bat.bash").display()
|
||||||
|
);
|
||||||
|
println!(
|
||||||
|
"cargo:rustc-env=BAT_GENERATED_COMPLETION_FISH={}",
|
||||||
|
out_dir.join("assets/completions/bat.fish").display()
|
||||||
|
);
|
||||||
|
println!(
|
||||||
|
"cargo:rustc-env=BAT_GENERATED_COMPLETION_PS1={}",
|
||||||
|
out_dir.join("assets/completions/_bat.ps1").display()
|
||||||
|
);
|
||||||
|
println!(
|
||||||
|
"cargo:rustc-env=BAT_GENERATED_COMPLETION_ZSH={}",
|
||||||
|
out_dir.join("assets/completions/bat.zsh").display()
|
||||||
|
);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -202,6 +202,9 @@ Options:
|
|||||||
This option exists for POSIX-compliance reasons ('u' is for 'unbuffered'). The output is
|
This option exists for POSIX-compliance reasons ('u' is for 'unbuffered'). The output is
|
||||||
always unbuffered - this option is simply ignored.
|
always unbuffered - this option is simply ignored.
|
||||||
|
|
||||||
|
--completion <SHELL>
|
||||||
|
Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]
|
||||||
|
|
||||||
--diagnostic
|
--diagnostic
|
||||||
Show diagnostic information for bug reports.
|
Show diagnostic information for bug reports.
|
||||||
|
|
||||||
|
@ -58,6 +58,8 @@ Options:
|
|||||||
Only print the lines from N to M.
|
Only print the lines from N to M.
|
||||||
-L, --list-languages
|
-L, --list-languages
|
||||||
Display all supported languages.
|
Display all supported languages.
|
||||||
|
--completion <SHELL>
|
||||||
|
Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]
|
||||||
-h, --help
|
-h, --help
|
||||||
Print help (see more with '--help')
|
Print help (see more with '--help')
|
||||||
-V, --version
|
-V, --version
|
||||||
|
@ -564,6 +564,17 @@ pub fn build_app(interactive_output: bool) -> Command {
|
|||||||
.help("Do not load custom assets"),
|
.help("Do not load custom assets"),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#[cfg(feature = "application")]
|
||||||
|
{
|
||||||
|
app = app.arg(
|
||||||
|
Arg::new("completion")
|
||||||
|
.long("completion")
|
||||||
|
.value_name("SHELL")
|
||||||
|
.value_parser(["bash", "fish", "ps1", "zsh"])
|
||||||
|
.help("Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "lessopen")]
|
#[cfg(feature = "lessopen")]
|
||||||
{
|
{
|
||||||
app = app
|
app = app
|
||||||
|
6
src/bin/bat/completions.rs
Normal file
6
src/bin/bat/completions.rs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
use std::env;
|
||||||
|
|
||||||
|
pub const BASH_COMPLETION: &str = include_str!(env!("BAT_GENERATED_COMPLETION_BASH"));
|
||||||
|
pub const FISH_COMPLETION: &str = include_str!(env!("BAT_GENERATED_COMPLETION_FISH"));
|
||||||
|
pub const PS1_COMPLETION: &str = include_str!(env!("BAT_GENERATED_COMPLETION_PS1"));
|
||||||
|
pub const ZSH_COMPLETION: &str = include_str!(env!("BAT_GENERATED_COMPLETION_ZSH"));
|
@ -3,6 +3,8 @@
|
|||||||
mod app;
|
mod app;
|
||||||
mod assets;
|
mod assets;
|
||||||
mod clap_app;
|
mod clap_app;
|
||||||
|
#[cfg(feature = "application")]
|
||||||
|
mod completions;
|
||||||
mod config;
|
mod config;
|
||||||
mod directories;
|
mod directories;
|
||||||
mod input;
|
mod input;
|
||||||
@ -347,6 +349,18 @@ fn run() -> Result<bool> {
|
|||||||
return Ok(true);
|
return Ok(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "application")]
|
||||||
|
if let Some(shell) = app.matches.get_one::<String>("completion") {
|
||||||
|
match shell.as_str() {
|
||||||
|
"bash" => println!("{}", completions::BASH_COMPLETION),
|
||||||
|
"fish" => println!("{}", completions::FISH_COMPLETION),
|
||||||
|
"ps1" => println!("{}", completions::PS1_COMPLETION),
|
||||||
|
"zsh" => println!("{}", completions::ZSH_COMPLETION),
|
||||||
|
_ => unreachable!("No completion for shell '{}' available.", shell),
|
||||||
|
}
|
||||||
|
return Ok(true);
|
||||||
|
}
|
||||||
|
|
||||||
match app.matches.subcommand() {
|
match app.matches.subcommand() {
|
||||||
Some(("cache", cache_matches)) => {
|
Some(("cache", cache_matches)) => {
|
||||||
// If there is a file named 'cache' in the current working directory,
|
// If there is a file named 'cache' in the current working directory,
|
||||||
|
Loading…
Reference in New Issue
Block a user