diff options
Diffstat (limited to '')
-rw-r--r-- | completions/perl | 146 | ||||
-rw-r--r-- | completions/perlcritic | 51 | ||||
-rw-r--r-- | completions/perltidy | 55 |
3 files changed, 252 insertions, 0 deletions
diff --git a/completions/perl b/completions/perl new file mode 100644 index 0000000..9823d73 --- /dev/null +++ b/completions/perl @@ -0,0 +1,146 @@ +# bash completion for perl -*- shell-script -*- + +_perl_helper() +{ + COMPREPLY=($(compgen -P "$prefix" -W \ + "$(${2:-perl} ${BASH_SOURCE[0]%/*}/../helpers/perl $1 $cur)" \ + -- "$cur")) + [[ $1 == functions ]] || __ltrim_colon_completions "$prefix$cur" +} + +_perl() +{ + local cur prev words cword + _init_completion -n : || return + + local prefix="" temp optPrefix optSuffix + + # If option not followed by whitespace, reassign prev and cur + if [[ $cur == -?* ]]; then + temp=$cur + prev=${temp:0:2} + cur=${temp:2} + if [[ $prev == -d && $cur == t* ]]; then + prev=-dt + cur=${cur:1} + fi + optPrefix=-P$prev + optSuffix=-S/ + prefix=$prev + + case $prev in + -*[DeEiFl]) + return + ;; + -*[Ix]) + local IFS=$'\n' + compopt -o filenames + COMPREPLY=($(compgen -d $optPrefix $optSuffix -- "$cur")) + return + ;; + -*[mM]) + temp="${cur#-}" + prefix+="${cur%$temp}" + cur="$temp" + _perl_helper modules $1 + return + ;; + -*V) + if [[ $cur == :* ]]; then + temp="${cur##+(:)}" + prefix+="${cur%$temp}" + local IFS=$'\n' + COMPREPLY=($(compgen -P "$prefix" -W \ + '$($1 -MConfig -e "print join \"\\n\", + keys %Config::Config" 2>/dev/null)' -- "$temp")) + __ltrim_colon_completions "$prefix$temp" + fi + return + ;; + -*d | -*dt) + if [[ $cur == :* ]]; then + temp="${cur#:}" + prefix="$prefix${cur%$temp}" + cur="Devel::$temp" + _perl_helper modules $1 + fi + ;; + esac + + # Unlike other perl options, having a space between the `-e' and + # `-E' options and their arguments, e.g. `perl -e "exit 2"', is + # valid syntax. However, the argument is neither a filename nor a + # directory, but one line of perl program, thus do not suggest + # _filedir completion. + elif [[ $prev == -e ]] || [[ $prev == -E ]]; then + return + + # Likewise, `-I' also accepts a space between option and argument + # and it takes a directory as value. + elif [[ $prev == -I ]]; then + local IFS=$'\n' + compopt -o filenames + COMPREPLY=($(compgen -d ${optPrefix-} ${optSuffix-} -- "$cur")) + return + + elif [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '-C -s -T -u -U -W -X -h -v -V -c -w -d -D -p + -n -a -F -l -0 -I -m -M -P -S -x -i -e' -- "$cur")) + else + _filedir + fi +} && + complete -F _perl perl + +_perldoc() +{ + local cur prev words cword + _init_completion -n : || return + + local prefix="" temp + + # completing an option (may or may not be separated by a space) + if [[ $cur == -?* ]]; then + temp=$cur + prev=${temp:0:2} + cur=${temp:2} + prefix=$prev + fi + + local perl="${1%doc}" + [[ $perl == "$1" ]] || ! type $perl &>/dev/null && perl= + + case $prev in + -*[hVnoMwL]) + return + ;; + -*d) + _filedir + return + ;; + -*f) + _perl_helper functions $perl + return + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur")) + else + # return available modules (unless it is clearly a file) + if [[ $cur != @(*/|[.~])* ]]; then + _perl_helper perldocs $perl + if [[ $cur == p* ]]; then + COMPREPLY+=($(compgen -W \ + '$(PERLDOC_PAGER=cat "$1" -u perl | \ + command sed -ne "/perl.*Perl overview/,/perlwin32/p" | \ + awk "\$NF=2 && \$1 ~ /^perl/ { print \$1 }")' \ + -- "$cur")) + fi + fi + _filedir 'p@([lm]|od)' + fi +} && + complete -F _perldoc -o bashdefault perldoc + +# ex: filetype=sh diff --git a/completions/perlcritic b/completions/perlcritic new file mode 100644 index 0000000..7843549 --- /dev/null +++ b/completions/perlcritic @@ -0,0 +1,51 @@ +# perlcritic(1) completion -*- shell-script -*- + +_perlcritic() +{ + local cur prev words cword + _init_completion || return + + case $prev in + --help | --version | --top | --include | --exclude | --single-policy | \ + --colo?(u)r-severity-* | --program-extensions | -[?HVs]) + return + ;; + --severity) + COMPREPLY=($(compgen -W "{1..5} brutal cruel harsh stern gentle" \ + -- "$cur")) + return + ;; + --profile | -p) + _filedir perlcriticrc + return + ;; + --theme) + COMPREPLY=($(compgen -W '$("$1" --list-themes 2>/dev/null)' \ + -- "$cur")) + return + ;; + --profile-strictness) + COMPREPLY=($(compgen -W 'warn fatal quiet' -- "$cur")) + return + ;; + --verbose) + COMPREPLY=($(compgen -W '{1..11}' -- "$cur")) + return + ;; + --pager) + compopt -o filenames + COMPREPLY=($(compgen -c -- "$cur")) + return + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur")) + return + fi + + _filedir 'p[lm]' +} && + complete -F _perlcritic perlcritic + +# ex: filetype=sh diff --git a/completions/perltidy b/completions/perltidy new file mode 100644 index 0000000..4404cf8 --- /dev/null +++ b/completions/perltidy @@ -0,0 +1,55 @@ +# perltidy(1) completion -*- shell-script -*- + +_perltidy() +{ + local cur prev words cword + _init_completion -n = || return + + case $prev in + -h | --help) + return + ;; + -o) + _filedir + return + ;; + esac + + case $cur in + -pro=*) + cur="${cur#*=}" + _filedir + return + ;; + -ole=*) + COMPREPLY=($(compgen -W 'dos win mac unix' -- "${cur#*=}")) + return + ;; + -bt=* | -pt=* | -sbt=* | -bvt=* | -pvt=* | -sbvt=* | -bvtc=* | -pvtc=* | -sbvtc=* | \ + -cti=* | -kbl=* | -vt=*) + COMPREPLY=($(compgen -W '0 1 2' -- "${cur#*=}")) + return + ;; + -vtc=*) + COMPREPLY=($(compgen -W '0 1' -- "${cur#*=}")) + return + ;; + -cab=*) + COMPREPLY=($(compgen -W '0 1 2 3' -- "${cur#*=}")) + return + ;; + -*=) + return + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + [[ ${COMPREPLY-} == *= ]] && compopt -o nospace + else + _filedir 'p[lm]|t' + fi +} && + complete -F _perltidy perltidy + +# ex: filetype=sh |