aboutsummaryrefslogtreecommitdiff
path: root/bat/autocomplete/bat.zsh
blob: b2c93cb14f7b554885cdc128080df7403f304ef1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#compdef bat

local context state state_descr line
typeset -A opt_args

(( $+functions[_bat_cache_subcommand] )) ||
_bat_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`), repeat twice to disable disable automatic paging (alias for `--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]'
        '(: --no-config)'--no-config'[Do not use the configuration file]'
        '(: --no-custom-assets)'--no-custom-assets'[Do not load custom assets]'
        '(: --config-dir)'--config-dir'[Show bat'"'"'s configuration directory]'
        '(: --config-file)'--config-file'[Show path to the configuration file]'
        '(: --generate-config-file)'--generate-config-file'[Generates a default configuration file]'
        '(: --cache-dir)'--cache-dir'[Show bat'"'"'s cache directory]'
        '(: -)'{-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' default auto full plain changes header header-filename header-filesize grid rule numbers snip
        ;;
    esac
}

# first positional argument
if (( ${#words} == 2 )); then
    local -a subcommands
    subcommands=('cache:Modify the syntax-definition and theme cache')
    _describe subcommand subcommands
    _bat_main
else
    case $words[2] in
        cache)
            _bat_cache_subcommand
        ;;

        *)
            _bat_main
        ;;
    esac
fi