diff options
author | Ville Skyttä <ville.skytta@iki.fi> | 2021-06-03 17:57:05 +0300 |
---|---|---|
committer | David Peter <sharkdp@users.noreply.github.com> | 2021-06-28 11:58:03 +0200 |
commit | e05f5010dafda6923561d83d3c9129a82b75447b (patch) | |
tree | e39ed377d5f88c506e8dedb2aeabc5f11c999968 | |
parent | 073b9968c078788a2c95f87c1c888ea824dbbc6e (diff) |
Add bash completion
Closes https://github.com/sharkdp/bat/issues/1010
-rw-r--r-- | .github/workflows/CICD.yml | 1 | ||||
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | assets/completions/bat.bash.in | 84 | ||||
-rw-r--r-- | build.rs | 5 |
4 files changed, 91 insertions, 0 deletions
diff --git a/.github/workflows/CICD.yml b/.github/workflows/CICD.yml index 11119192..22f114a7 100644 --- a/.github/workflows/CICD.yml +++ b/.github/workflows/CICD.yml @@ -268,6 +268,7 @@ jobs: cp "README.md" "LICENSE-MIT" "LICENSE-APACHE" "CHANGELOG.md" "$ARCHIVE_DIR" # Autocompletion files + cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.bash "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.bash" cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.fish "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.fish" cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.zsh "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.zsh" @@ -2,6 +2,7 @@ **/*.rs.bk # Generated files +/assets/completions/bat.bash /assets/completions/bat.fish /assets/completions/bat.zsh /assets/manual/bat.1 diff --git a/assets/completions/bat.bash.in b/assets/completions/bat.bash.in new file mode 100644 index 00000000..12dda749 --- /dev/null +++ b/assets/completions/bat.bash.in @@ -0,0 +1,84 @@ +# shellcheck disable=SC2207 + +_bat() { + if [[ ${COMP_WORDS[1]-} == cache ]]; then + case $3 in + --source | --target) + local IFS=$'\n' + COMPREPLY=($(compgen -d -- "$2")) + compopt -o filenames + return 0 + ;; + esac + COMPREPLY=($(compgen -W " + --build --clear --source --target --blank --help + " -- "$2")) + return 0 + fi + + case $3 in + -l | --language) + local IFS=$'\n' + COMPREPLY=($(compgen -W "$( + "$1" --list-languages | while IFS=: read -r lang _; do + printf "%s\n" "$lang" + done + )" -- "$2")) + compopt -o filenames # for escaping + return 0 + ;; + -H | --highlight-line | --diff-context | --tabs | --terminal-width | \ + -m | --map-syntax | --style | --line-range | -h | --help | -V | \ + --version) + # argument required but no completion available, or argument + # causes an exit + return 0 + ;; + --file-name) + local IFS=$'\n' + COMPREPLY=($(compgen -f -- "$2")) + compopt -o filenames + return 0 + ;; + --wrap) + COMPREPLY=($(compgen -W "auto never character" -- "$2")) + return 0 + ;; + --color | --decorations | --paging) + COMPREPLY=($(compgen -W "auto never always" -- "$2")) + return 0 + ;; + --italic-text) + COMPREPLY=($(compgen -W "always never" -- "$2")) + return 0 + ;; + --pager) + COMPREPLY=($(compgen -c -- "$2")) + return 0 + ;; + --theme) + local IFS=$'\n' + COMPREPLY=($(compgen -W "$("$1" --list-themes)" -- "$2")) + compopt -o filenames + return 0 + ;; + esac + + if [[ $2 == -* ]]; then + COMPREPLY=($(compgen -W " + --show-all --plain --language --highlight-line + --file-name --diff --diff-context --tabs --wrap + --terminal-width --number --color --italic-text + --decorations --paging --pager --map-syntax --theme + --list-themes --style --line-range --list-languages + --help --version + " -- "$2")) + return 0 + fi + + local IFS=$'\n' + COMPREPLY=($(compgen -f -- "$2")) + compopt -o filenames + ((COMP_CWORD == 1)) && COMPREPLY+=($(compgen -W cache -- "$2")) + +} && complete -F _bat {{PROJECT_EXECUTABLE}} @@ -56,6 +56,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> { )?; template( &variables, + "assets/completions/bat.bash.in", + out_dir.join("assets/completions/bat.bash"), + )?; + template( + &variables, "assets/completions/bat.fish.in", out_dir.join("assets/completions/bat.fish"), )?; |