summaryrefslogtreecommitdiff
path: root/completions/function
blob: a97b5255c41db8c871b0668decb92e51c493fa2f (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
# bash shell function completion                           -*- shell-script -*-

_function()
{
    local cur prev words cword
    _init_completion || return

    if [[ $1 == @(declare|typeset) ]]; then
        if [[ $cur == [-+]* ]]; then
            local opts
            opts=( $(_parse_usage "$1") )
            # Most options also have a '+' form.  We'll exclude the ones that don't with compgen.
            opts+=( ${opts[*]/-/+} )
            COMPREPLY=( $(compgen -W "${opts[*]}" -X '+[Ffgp]' -- "$cur") )
        else
            local i=1
            while [[ ${words[i]} == [-+]* ]]; do
                if [[ ${words[i]} == -*[fF]* ]]; then
                    COMPREPLY=( $(compgen -A function -- "$cur") )
                    return
                fi
                ((i++))
            done
            if [[ $i -gt 1 ]]; then
                # There was at least one option and it was not one that limited operations to functions
                COMPREPLY=( $(compgen -A variable -- "$cur") )
            fi
        fi
    elif [[ $cword -eq 1 ]]; then
        COMPREPLY=( $(compgen -A function -- "$cur") )
    else
        COMPREPLY=( "() $(type -- ${words[1]} | command sed -e 1,2d)" )
    fi
} &&
complete -F _function function declare typeset

# ex: filetype=sh