summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKienyew <aobi100bt@hotmail.com>2020-08-29 23:19:42 +0800
committerDavid Peter <sharkdp@users.noreply.github.com>2020-09-14 11:28:09 +0200
commit9885d4ebf0936bb078d418cb243237fabceb7f53 (patch)
treec1fbf32f7731a8b8850ff5e9e5835e440ed1c3d4
parent222e080ce7c3a3aefdd29c71a9e20088c97e501a (diff)
add completion for 'cache' subcommand
-rw-r--r--assets/completions/bat.zsh145
1 files changed, 90 insertions, 55 deletions
diff --git a/assets/completions/bat.zsh b/assets/completions/bat.zsh
index 5e39d2be..2dc8e221 100644
--- a/assets/completions/bat.zsh
+++ b/assets/completions/bat.zsh
@@ -1,56 +1,91 @@
#compdef bat
-# FIXME: help me with the subcommand `cache`, zsh completion is hard as hell
-
-local -a args
-local state
-
-args=(
- '(-A --show-all)'{-A,--show-all}'[Show non-printable characters (space, tab, newline, ..)]'
- {-p,--plain}'[Show plain style (alias for `--style=plain`)]:When `-p` is used twice (`-pp`), it also disables automatic paging (alias for `--style=plain --paging=never`)'
- '(-l --language)'{-l+,--language=}'[Set the language for syntax highlighting]:<language>:->language'
- '(-H --highlight-line)'{-H,--highlight-line}'[Highlight lines N through M]:<N\:M>...'
- '(--file-name)'--file-name'[Specify the name to display for a file]:<name>...:_files'
- '(-d --diff)'--diff'[Only show lines that have been added/removed/modified]'
- '(--diff-context)'--diff-context'[Include N lines of context around added/removed/modified lines when using `--diff`]:<N> (lines):()'
- '(--tabs)'--tabs'[Set the tab width to T spaces]:<T> (tab width):()'
- '(--wrap)'--wrap='[Specify the text-wrapping mode]:<when>:(auto never character)'
- '(--terminal-width)'--terminal-width'[Explicitly set the width of the terminal instead of determining it automatically]:<width>'
- '(-n --number)'{-n,--number}'[Show line numbers]'
- '(--color)'--color='[When to use colors]:<when>:(auto never always)'
- '(--italic-text)'--italic-text='[Use italics in output]:<when>:(always never)'
- '(--decorations)'--decorations='[When to show the decorations]:<when>:(auto never always)'
- '(--paging)'--paging='[Specify when to use the pager]:<when>:(auto never always)'
- '(-m --map-syntax)'{-m+,--map-syntax=}'[Use the specified syntax for files matching the glob pattern]:<glob\:syntax>...'
- '(--theme)'--theme='[Set the color theme for syntax highlighting]:<theme>:->theme'
- '(: --list-themes --list-languages -L)'--list-themes'[Display all supported highlighting themes]'
- '(--style)'--style='[Comma-separated list of style elements to display]:<components>:->style'
- '(-r --line-range)'{-r+,--line-range=}'[Only print the lines from N to M]:<N\:M>...'
- '(: --list-themes --list-languages -L)'{-L,--list-languages}'[Display all supported languages]'
- '(: -)'{-h,--help}'[Print this help message]'
- '(: -)'{-V,--version}'[Show version information]'
- '*: :_files'
-)
-
-_arguments -S -s $args
-
-case "$state" in
- language)
- local IFS=$'\n'
- local -a languages
- languages=( $(bat --list-languages | awk -F':|,' '{ for (i = 1; i <= NF; ++i) printf("%s:%s\n", $i, $1) }') )
-
- _describe 'language' languages
- ;;
-
- theme)
- local IFS=$'\n'
- local -a themes
- themes=( $(bat --list-themes | sort) )
-
- _values 'theme' $themes
- ;;
-
- style)
- _values -s , 'style' auto full plain changes header grid numbers snip
- ;;
-esac
+
+local context state state_descr line
+typeset -A opt_args
+
+(( $+functions[_cache_subcommand] )) ||
+_cache_subcommand() {
+ local -a args
+ args=(
+ '(-b --build -c --clear)'{-b,--build}'[Initialize or update the syntax/theme cache]'
+ '(-b --build -c --clear)'{-c,--clear}'[Remove the cached syntax definitions and themes]'
+ '(--source)'--source='[Use a different directory to load syntaxes and themes from]:directory:_files -/'
+ '(--target)'--target='[Use a different directory to store the cached syntax and theme set]:directory:_files -/'
+ '(--blank)'--blank'[Create completely new syntax and theme sets)]'
+ '(: -)'{-h,--help}'[Prints help information]'
+ '*: :'
+ )
+
+ _arguments -S -s $args
+}
+
+(( $+functions[_bat_main] )) ||
+_bat_main() {
+ local -a args
+ args=(
+ '(-A --show-all)'{-A,--show-all}'[Show non-printable characters (space, tab, newline, ..)]'
+ {-p,--plain}'[Show plain style (alias for `--style=plain`)]:When `-p` is used twice (`-pp`), it also disables automatic paging (alias for `--style=plain --paging=never`)'
+ '(-l --language)'{-l+,--language=}'[Set the language for syntax highlighting]:<language>:->language'
+ '(-H --highlight-line)'{-H,--highlight-line}'[Highlight lines N through M]:<N\:M>...'
+ '(--file-name)'--file-name'[Specify the name to display for a file]:<name>...:_files'
+ '(-d --diff)'--diff'[Only show lines that have been added/removed/modified]'
+ '(--diff-context)'--diff-context'[Include N lines of context around added/removed/modified lines when using `--diff`]:<N> (lines):()'
+ '(--tabs)'--tabs'[Set the tab width to T spaces]:<T> (tab width):()'
+ '(--wrap)'--wrap='[Specify the text-wrapping mode]:<when>:(auto never character)'
+ '(--terminal-width)'--terminal-width'[Explicitly set the width of the terminal instead of determining it automatically]:<width>'
+ '(-n --number)'{-n,--number}'[Show line numbers]'
+ '(--color)'--color='[When to use colors]:<when>:(auto never always)'
+ '(--italic-text)'--italic-text='[Use italics in output]:<when>:(always never)'
+ '(--decorations)'--decorations='[When to show the decorations]:<when>:(auto never always)'
+ '(--paging)'--paging='[Specify when to use the pager]:<when>:(auto never always)'
+ '(-m --map-syntax)'{-m+,--map-syntax=}'[Use the specified syntax for files matching the glob pattern]:<glob\:syntax>...'
+ '(--theme)'--theme='[Set the color theme for syntax highlighting]:<theme>:->theme'
+ '(: --list-themes --list-languages -L)'--list-themes'[Display all supported highlighting themes]'
+ '(--style)'--style='[Comma-separated list of style elements to display]:<components>:->style'
+ '(-r --line-range)'{-r+,--line-range=}'[Only print the lines from N to M]:<N\:M>...'
+ '(: --list-themes --list-languages -L)'{-L,--list-languages}'[Display all supported languages]'
+ '(: -)'{-h,--help}'[Print this help message]'
+ '(: -)'{-V,--version}'[Show version information]'
+ '*: :_files'
+ )
+
+ _arguments -S -s $args
+
+ case "$state" in
+ language)
+ local IFS=$'\n'
+ local -a languages
+ languages=( $(bat --list-languages | awk -F':|,' '{ for (i = 1; i <= NF; ++i) printf("%s:%s\n", $i, $1) }') )
+
+ _describe 'language' languages
+ ;;
+
+ theme)
+ local IFS=$'\n'
+ local -a themes
+ themes=( $(bat --list-themes | sort) )
+
+ _values 'theme' $themes
+ ;;
+
+ style)
+ _values -s , 'style' auto full plain changes header grid numbers snip
+ ;;
+ esac
+}
+
+# first positional argument
+if (( ${#words} == 2 )); then
+ _values subcommand cache
+ _bat_main
+else
+ case $words[2] in
+ cache)
+ _cache_subcommand
+ ;;
+
+ *)
+ _bat_main
+ ;;
+ esac
+fi