mirror of
https://github.com/sharkdp/bat
synced 2026-06-09 10:03:18 +00:00
fix(completions): force --no-paging on bat invocations in completion scripts (#3760)
Every shell completion script (bash, zsh, fish, PowerShell) shells out to bat to enumerate languages/themes for tab completion candidates. If the user has wired bat into LESSOPEN (e.g. LESSOPEN='|-bat -f -pp %s'), bat's normal pager auto-detection can engage when stdout looks like a terminal at completion time and reflect ANSI escape sequences back into the candidate list. The result is the issue's reproducer: tab completion expands 'Per' to '\033[38;2;248;248;242mPerl' instead of 'Perl'. The list-languages/list-themes calls are always meant to be machine- readable, so they should never page. Pass --no-paging explicitly to every bat invocation inside the four completion files. The flag is the public alias for --paging=never (already documented in bat --help) and is the same form completion scripts elsewhere in the codebase use. Touches the four completion files only; no production code changes.
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
- Syntax highlighting for Python files using uv as script runner in shebang #3689 (@janlarres)
|
- Syntax highlighting for Python files using uv as script runner in shebang #3689 (@janlarres)
|
||||||
|
|
||||||
## Bugfixes
|
## Bugfixes
|
||||||
|
- Pass `--no-paging` to `bat` invocations inside the bash / zsh / fish / PowerShell shell completion scripts so that shell-level pager wiring (e.g. `LESSOPEN='|-bat -f -pp %s'`) cannot inject ANSI escape sequences into the completion candidates. Closes #3760 (@mvanhorn)
|
||||||
- Quote filenames before substituting them into `$LESSOPEN` / `$LESSCLOSE` templates, preventing shell injection when a filename contains shell metacharacters, see #3726 (@curious-rabbit)
|
- Quote filenames before substituting them into `$LESSOPEN` / `$LESSCLOSE` templates, preventing shell injection when a filename contains shell metacharacters, see #3726 (@curious-rabbit)
|
||||||
- Fix `--list-themes` unconditionally probing the terminal via OSC 10/11 even when `--theme` was set to an explicit value, see #3700 (regression introduced in bc42149a). (@optimistiCli)
|
- Fix `--list-themes` unconditionally probing the terminal via OSC 10/11 even when `--theme` was set to an explicit value, see #3700 (regression introduced in bc42149a). (@optimistiCli)
|
||||||
- Fix inverted `$LESSCLOSE` warning so bat warns on nonzero exit, not on success. See #3654 (@cuiweixie)
|
- Fix inverted `$LESSCLOSE` warning so bat warns on nonzero exit, not on success. See #3654 (@cuiweixie)
|
||||||
|
|||||||
Vendored
+2
-2
@@ -14,12 +14,12 @@ Register-ArgumentCompleter -Native -CommandName '{{PROJECT_EXECUTABLE}}' -Script
|
|||||||
$ArrayPrint = @('unicode', 'caret')
|
$ArrayPrint = @('unicode', 'caret')
|
||||||
|
|
||||||
function Get-MyThemes(){
|
function Get-MyThemes(){
|
||||||
$themes = {{PROJECT_EXECUTABLE}} --list-themes | ForEach-Object {$_ -replace "^(.*)$", '''$1'''} | select-object
|
$themes = {{PROJECT_EXECUTABLE}} --no-paging --list-themes | ForEach-Object {$_ -replace "^(.*)$", '''$1'''} | select-object
|
||||||
return $themes
|
return $themes
|
||||||
}
|
}
|
||||||
|
|
||||||
function Get-MyLanguages(){
|
function Get-MyLanguages(){
|
||||||
$themes = {{PROJECT_EXECUTABLE}} --list-languages | ForEach-Object{[pscustomobject]@{MyParameter=$_.Substring(0,$_.IndexOf(":")).Trim();MyDescription=$_.Substring($_.IndexOf(":")+1)}} | select-object
|
$themes = {{PROJECT_EXECUTABLE}} --no-paging --list-languages | ForEach-Object{[pscustomobject]@{MyParameter=$_.Substring(0,$_.IndexOf(":")).Trim();MyDescription=$_.Substring($_.IndexOf(":")+1)}} | select-object
|
||||||
return $themes
|
return $themes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+3
-3
@@ -80,7 +80,7 @@ _bat() {
|
|||||||
-l | --language)
|
-l | --language)
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
COMPREPLY=($(compgen -W "$(
|
COMPREPLY=($(compgen -W "$(
|
||||||
"$1" --list-languages | while IFS=: read -r lang _; do
|
"$1" --no-paging --list-languages | while IFS=: read -r lang _; do
|
||||||
printf "%s\n" "$lang"
|
printf "%s\n" "$lang"
|
||||||
done
|
done
|
||||||
)" -- "$cur"))
|
)" -- "$cur"))
|
||||||
@@ -150,14 +150,14 @@ _bat() {
|
|||||||
;;
|
;;
|
||||||
--theme)
|
--theme)
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
COMPREPLY=($(compgen -W "auto${IFS}auto:always${IFS}auto:system${IFS}dark${IFS}light${IFS}$("$1" --list-themes)" -- "$cur"))
|
COMPREPLY=($(compgen -W "auto${IFS}auto:always${IFS}auto:system${IFS}dark${IFS}light${IFS}$("$1" --no-paging --list-themes)" -- "$cur"))
|
||||||
__bat_escape_completions
|
__bat_escape_completions
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
--theme-dark | \
|
--theme-dark | \
|
||||||
--theme-light)
|
--theme-light)
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
COMPREPLY=($(compgen -W "$("$1" --list-themes)" -- "$cur"))
|
COMPREPLY=($(compgen -W "$("$1" --no-paging --list-themes)" -- "$cur"))
|
||||||
__bat_escape_completions
|
__bat_escape_completions
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
|
|||||||
Vendored
+5
-5
@@ -15,11 +15,11 @@ function __bat_complete_files -a token
|
|||||||
end
|
end
|
||||||
|
|
||||||
function __bat_complete_one_language -a comp
|
function __bat_complete_one_language -a comp
|
||||||
command $bat --list-languages | string split -f1 : | string match -e "$comp"
|
command $bat --no-paging --list-languages | string split -f1 : | string match -e "$comp"
|
||||||
end
|
end
|
||||||
|
|
||||||
function __bat_complete_list_languages
|
function __bat_complete_list_languages
|
||||||
for spec in (command $bat --list-languages)
|
for spec in (command $bat --no-paging --list-languages)
|
||||||
set -l name (string split -f1 : $spec)
|
set -l name (string split -f1 : $spec)
|
||||||
for ext in (string split -f2 : $spec | string split ,)
|
for ext in (string split -f2 : $spec | string split ,)
|
||||||
test -n "$ext"; or continue
|
test -n "$ext"; or continue
|
||||||
@@ -234,11 +234,11 @@ complete -c $bat -l tabs -x -a "$tabs_opts" -d "Set tab width" -n __bat_no_excl_
|
|||||||
|
|
||||||
complete -c $bat -l terminal-width -x -d "Set terminal <width>, +<offset>, or -<offset>" -n __bat_no_excl_args
|
complete -c $bat -l terminal-width -x -d "Set terminal <width>, +<offset>, or -<offset>" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c $bat -l theme -x -a "$special_themes(command $bat --list-themes | command cat)" -d "Set the syntax highlighting theme" -n __bat_no_excl_args
|
complete -c $bat -l theme -x -a "$special_themes(command $bat --no-paging --list-themes | command cat)" -d "Set the syntax highlighting theme" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c $bat -l theme-dark -x -a "(command $bat --list-themes | command cat)" -d "Set the syntax highlighting theme for dark backgrounds" -n __bat_no_excl_args
|
complete -c $bat -l theme-dark -x -a "(command $bat --no-paging --list-themes | command cat)" -d "Set the syntax highlighting theme for dark backgrounds" -n __bat_no_excl_args
|
||||||
|
|
||||||
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 -l theme-light -x -a "(command $bat --no-paging --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 "Enable unbuffered input reading for streaming use cases" -n __bat_no_excl_args
|
complete -c $bat -s u -l unbuffered -d "Enable unbuffered input reading for streaming use cases" -n __bat_no_excl_args
|
||||||
|
|
||||||
|
|||||||
Vendored
+3
-3
@@ -95,20 +95,20 @@ _{{PROJECT_EXECUTABLE}}_main() {
|
|||||||
# language name is offered as the completion value; the matchers
|
# language name is offered as the completion value; the matchers
|
||||||
# show up as the menu description. See
|
# show up as the menu description. See
|
||||||
# https://github.com/sharkdp/bat/issues/3735.
|
# https://github.com/sharkdp/bat/issues/3735.
|
||||||
languages=( ${(f)"$({{PROJECT_EXECUTABLE}} --color=never --decorations=never --list-languages)"} )
|
languages=( ${(f)"$({{PROJECT_EXECUTABLE}} --no-paging --color=never --decorations=never --list-languages)"} )
|
||||||
|
|
||||||
_describe 'language' languages && ret=0
|
_describe 'language' languages && ret=0
|
||||||
;;
|
;;
|
||||||
|
|
||||||
themes)
|
themes)
|
||||||
local -a themes expl
|
local -a themes expl
|
||||||
themes=(${(f)"$(_call_program themes {{PROJECT_EXECUTABLE}} --color=never --decorations=never --list-themes)"} )
|
themes=(${(f)"$(_call_program themes {{PROJECT_EXECUTABLE}} --no-paging --color=never --decorations=never --list-themes)"} )
|
||||||
|
|
||||||
_wanted themes expl 'theme' compadd -a themes && ret=0
|
_wanted themes expl 'theme' compadd -a themes && ret=0
|
||||||
;;
|
;;
|
||||||
theme_preferences)
|
theme_preferences)
|
||||||
local -a themes expl
|
local -a themes expl
|
||||||
themes=(auto dark light auto:always auto:system ${(f)"$(_call_program themes {{PROJECT_EXECUTABLE}} --color=never --decorations=never --list-themes)"} )
|
themes=(auto dark light auto:always auto:system ${(f)"$(_call_program themes {{PROJECT_EXECUTABLE}} --no-paging --color=never --decorations=never --list-themes)"} )
|
||||||
|
|
||||||
_wanted themes expl 'theme' compadd -a themes && ret=0
|
_wanted themes expl 'theme' compadd -a themes && ret=0
|
||||||
;;
|
;;
|
||||||
|
|||||||
Reference in New Issue
Block a user