From c4a7d888b7f4fbf426c65688d892a23399701b67 Mon Sep 17 00:00:00 2001 From: Keith Hall Date: Sat, 27 Sep 2025 16:04:09 +0300 Subject: [PATCH] Add missing shell completions for various CLI arguments --- CHANGELOG.md | 1 + assets/completions/bat.bash.in | 22 ++++++++++++++++++++++ assets/completions/bat.fish.in | 26 ++++++++++++++++++++++++-- assets/completions/bat.zsh.in | 12 ++++++++++++ 4 files changed, 59 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc2169e9..592229a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ - Make --map-syntax target case insensitive to match --language, see #3206 (@keith-hall) - Correctly determine the end of the line in UTF16LE/BE input #3369 (@keith-hall) - `--style=changes` no longer prints a two-space indent when the file is unmodified, see issue #2710 and PR #3406 (@jyn514) +- Add missing shell completions, see #3411 (@keith-hall) ## Other diff --git a/assets/completions/bat.bash.in b/assets/completions/bat.bash.in index 90931f24..68c80234 100644 --- a/assets/completions/bat.bash.in +++ b/assets/completions/bat.bash.in @@ -80,6 +80,7 @@ _bat() { --line-range | \ -L | --list-languages | \ --lessopen | \ + --no-paging | \ --diagnostic | \ --acknowledgements | \ -h | --help | \ @@ -100,6 +101,22 @@ _bat() { COMPREPLY=($(compgen -W "auto never character" -- "$cur")) return 0 ;; + --binary) + COMPREPLY=($(compgen -W "no-printing as-text" -- "$cur")) + return 0 + ;; + --nonprintable-notation) + COMPREPLY=($(compgen -W "unicode caret" -- "$cur")) + return 0 + ;; + --strip-ansi) + COMPREPLY=($(compgen -W "auto never always" -- "$cur")) + return 0 + ;; + --completion) + COMPREPLY=($(compgen -W "bash fish zsh ps1" -- "$cur")) + return 0 + ;; --color | --decorations | --paging) COMPREPLY=($(compgen -W "auto never always" -- "$cur")) return 0 @@ -157,6 +174,8 @@ _bat() { # --unbuffered excluded intentionally (no-op) COMPREPLY=($(compgen -W " --show-all + --nonprintable-notation + --binary --plain --language --highlight-line @@ -173,6 +192,7 @@ _bat() { --decorations --force-colorization --paging + --no-paging --pager --map-syntax --ignored-suffix @@ -182,10 +202,12 @@ _bat() { --list-themes --squeeze-blank --squeeze-limit + --strip-ansi --style --line-range --list-languages --lessopen + --completion --diagnostic --acknowledgements --set-terminal-title diff --git a/assets/completions/bat.fish.in b/assets/completions/bat.fish.in index 29979e8b..09f6407b 100644 --- a/assets/completions/bat.fish.in +++ b/assets/completions/bat.fish.in @@ -142,10 +142,16 @@ set -l special_themes ' complete -c $bat -l acknowledgements -d "Print acknowledgements" -n __fish_is_first_arg +complete -c $bat -l binary -x -a "no-printing as-text" -d "How to treat binary content" -n __bat_no_excl_args + complete -c $bat -l cache-dir -f -d "Show bat's cache directory" -n __fish_is_first_arg +complete -c $bat -s c -l chop-long-lines -d "Truncate all lines longer than screen width" -n __bat_no_excl_args + complete -c $bat -l color -x -a "$color_opts" -d "When to use colored output" -n __bat_no_excl_args +complete -c $bat -l completion -x -a "bash fish zsh ps1" -d "Show shell completion for a certain shell" -n __fish_is_first_arg + complete -c $bat -l config-dir -f -d "Display location of configuration directory" -n __fish_is_first_arg complete -c $bat -l config-file -f -d "Display location of configuration file" -n __fish_is_first_arg @@ -192,20 +198,34 @@ complete -c $bat -l no-custom-assets -d "Do not load custom assets" complete -c $bat -l no-lessopen -d "Disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)" +complete -c $bat -l nonprintable-notation -x -a "unicode caret" -d "Set notation for non-printable characters" -n __bat_no_excl_args + complete -c $bat -s n -l number -d "Only show line numbers, no other decorations" -n __bat_no_excl_args +complete -c $bat -l no-paging -d "Alias for --paging=never" -n __bat_no_excl_args + complete -c $bat -l pager -x -a "$pager_opts" -d "Which pager to use" -n __bat_no_excl_args complete -c $bat -l paging -x -a "$paging_opts" -d "When to use the pager" -n __bat_no_excl_args +complete -c $bat -s p -l plain -d "Show plain style" -n __bat_no_excl_args + +complete -c $bat -l set-terminal-title -d "Sets terminal title to filenames when using a pager" -n __bat_no_excl_args + +complete -c $bat -s A -l show-all -d "Show non-printable characters" -n __bat_no_excl_args + +complete -c $bat -s s -l squeeze-blank -d "Squeeze consecutive empty lines into a single empty line" -n __bat_no_excl_args + +complete -c $bat -l squeeze-limit -x -d "Set the maximum number of consecutive empty lines to be printed" -n __bat_no_excl_args + +complete -c $bat -l strip-ansi -x -a "auto never always" -d "Specify when to strip ANSI escape sequences from the input" -n __bat_no_excl_args + complete -c $bat -s p -l plain -d "Disable decorations" -n __bat_no_excl_args complete -c $bat -o pp -d "Disable decorations and paging" -n __bat_no_excl_args complete -c $bat -s P -d "Disable paging" -n __bat_no_excl_args -complete -c $bat -s A -l show-all -d "Show non-printable characters" -n __bat_no_excl_args - complete -c $bat -l style -x -k -a "(__fish_complete_list , __bat_style_opts)" -d "Specify which non-content elements to display" -n __bat_no_excl_args complete -c $bat -l tabs -x -a "$tabs_opts" -d "Set tab width" -n __bat_no_excl_args @@ -218,6 +238,8 @@ complete -c $bat -l theme-dark -x -a "(command $bat --list-themes | command cat) complete -c $bat -l theme-light -x -a "(command $bat --list-themes | command cat)" -d "Set the syntax highlighting theme for light backgrounds" -n __bat_no_excl_args +complete -c $bat -s u -l unbuffered -d "This option exists for POSIX-compliance reasons" -n __bat_no_excl_args + complete -c $bat -s V -l version -f -d "Show version information" -n __fish_is_first_arg complete -c $bat -l wrap -x -a "$wrap_opts" -d "Text-wrapping mode" -n __bat_no_excl_args diff --git a/assets/completions/bat.zsh.in b/assets/completions/bat.zsh.in index dfe1e1b9..910ec9d0 100644 --- a/assets/completions/bat.zsh.in +++ b/assets/completions/bat.zsh.in @@ -26,6 +26,7 @@ _{{PROJECT_EXECUTABLE}}_main() { args=( '(-A --show-all)'{-A,--show-all}'[show non-printable characters (space, tab, newline, ..)]' --nonprintable-notation='[specify how to display non-printable characters when using --show-all]:notation:(caret unicode)' + --binary='[specify how to treat binary content]:behavior:(no-printing as-text)' \*{-p,--plain}'[show plain style (alias for `--style=plain`), repeat twice to disable automatic paging (alias for `--paging=never`)]' '(-l --language)'{-l+,--language=}'[set the language for syntax highlighting]:language:->languages' \*{-H+,--highlight-line=}'[highlight specified block of lines]:start\:end' @@ -40,16 +41,27 @@ _{{PROJECT_EXECUTABLE}}_main() { --color='[specify when to use colors]:when:(auto never always)' --italic-text='[use italics in output]:when:(always never)' --decorations='[specify when to show the decorations]:when:(auto never always)' + '(-f --force-colorization)'--force-colorization'[force colorization and decorations]' --paging='[specify when to use the pager]:when:(auto never always)' + '(-P --no-paging)'--no-paging'[alias for --paging=never]' + --pager='[determine which pager to use]:command:' '(-m --map-syntax)'{-m+,--map-syntax=}'[map a glob pattern to an existing syntax name]: :->syntax-maps' + --ignored-suffix='[ignore extension]:suffix:' '(--theme)'--theme='[set the color theme for syntax highlighting]:theme:->theme_preferences' '(--theme-dark)'--theme-dark='[set the color theme for syntax highlighting for dark backgrounds]:theme:->themes' '(--theme-light)'--theme-light='[set the color theme for syntax highlighting for light backgrounds]:theme:->themes' '(: --list-themes --list-languages -L)'--list-themes'[show all supported highlighting themes]' + --squeeze-blank'[squeeze consecutive empty lines into a single empty line]' + --squeeze-limit='[set the maximum number of consecutive empty lines]:limit:' + --strip-ansi='[specify when to strip ANSI escape sequences]:when:(auto never always)' --style='[comma-separated list of style elements to display]: : _values "style [default]" default auto full plain changes header header-filename header-filesize grid rule numbers snip' \*{-r+,--line-range=}'[only print the specified line range]:start\:end' '(* -)'{-L,--list-languages}'[display all supported languages]' + '(-u --unbuffered)'--unbuffered'[this option exists for POSIX-compliance reasons]' + --completion='[show shell completion for a certain shell]:shell:(bash fish zsh ps1)' + --set-terminal-title'[sets terminal title to filenames when using a pager]' + --diagnostic'[show diagnostic information for bug reports]' -P'[disable paging]' "--no-config[don't use the configuration file]" "--no-custom-assets[don't load custom assets]"