diff options
-rw-r--r-- | Completion/Unix/Command/_perl | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_perl b/Completion/Unix/Command/_perl new file mode 100644 index 000000000..64163c3a1 --- /dev/null +++ b/Completion/Unix/Command/_perl @@ -0,0 +1,65 @@ +#compdef perl +# +# zsh completion code for the Perl interpreter +# Adam Spiers <adam@spiers.net> +# + +_perl () { + _arguments -s \ + '-0-:input record separator in octal (\0, if no argument): ' \ + '-a[autosplit mode with -n or -p (splits $_ into @F)]' \ + "-c[check syntax only (runs BEGIN and END blocks)]" \ + '-d[run scripts under debugger]' \ + '-d\:-[run under control of a debugging/tracing module]:debugging/tracing module:_perl_modules' \ + '-D-:set debugging flags (argument is a bit mask or flags): ' \ + "*-e+:one line of script. Several -e's allowed. Omit [programfile]." \ + "-F-:split() pattern for autosplit (-a). The //'s are optional.: " \ + '-h[list help summary]' \ + '-i-[edit <> files in place (make backup if extension supplied)]:backup file extension: ' \ + '*-I-[specify @INC/#include directory (may be used more than once)]:include path:_files -/' \ + '-l-[enable line ending processing, specifies line terminator]:output record separator in octal: ' \ + \*{-m,-M}"-[module.. executes \`use/no module...' before executing your script.]:module:_perl_m_opt" \ + "-n[assume 'while (<>) { ... }' loop around your script]" \ + "-p[assume loop like -n but print line also like sed]" \ + "-P[run script through C preprocessor before compilation]" \ + "-s[enable some switch parsing for switches after script name]" \ + "-S[look for the script using PATH environment variable]" \ + "-T[turn on tainting checks]" \ + "-u[dump core after parsing script]" \ + "-U[allow unsafe operations]" \ + "-v[print version number, patchlevel plus VERY IMPORTANT perl info]" \ + "-V-[print perl configuration information]:configuration keys:_perl_config_vars" \ + '-w[TURN WARNINGS ON FOR COMPILATION OF YOUR SCRIPT. Recommended.]' \ + '-x-[strip off text before #!perl line and perhaps cd to directory]:directory to cd to:_files -/' \ + '*:Perl script:_files -/ -g \*.p\[ml\]' +} + +_perl_m_opt () { + compset -P '-' + + if compset -P '*='; then + _message 'module arguments, comma separated' + else + _perl_modules -S= -q + fi +} + +_perl_config_vars () { + if (( ! $+_perl_config_vars )); then + # perl | perl ... nasty, but is there another way? + _perl_config_vars=( $(perl -V | + perl -ne 'push @m, (/(\w+)(?==)/g);' \ + -e 'END {print join "\n", @m}' ) ) + fi + + local add_colon='-P:' + compset -P '*:' && add_colon='' + + local delimiter='\ ' + (( compstate[quoting] )) && delimiter=' ' + + compset -P '* ' && compset -q + compadd "$expl[@]" $add_colon -S$delimiter -q -a _perl_config_vars +} + +_perl "$@" |