about summary refs log tree commit diff
path: root/Completion/User
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>2000-03-13 01:49:35 +0000
committerTanaka Akira <akr@users.sourceforge.net>2000-03-13 01:49:35 +0000
commit766f8691e60c9e1f0b4a24b0a639ccbe0489ec47 (patch)
treee9fa850e7651d497bf678dd160234b4f940f852f /Completion/User
parentbe0a1ed15ddcb54c167b3419ff47656111f4caa1 (diff)
downloadzsh-766f8691e60c9e1f0b4a24b0a639ccbe0489ec47.tar.gz
zsh-766f8691e60c9e1f0b4a24b0a639ccbe0489ec47.tar.xz
zsh-766f8691e60c9e1f0b4a24b0a639ccbe0489ec47.zip
zsh-workers/10087
Diffstat (limited to 'Completion/User')
-rw-r--r--Completion/User/_perl65
-rw-r--r--Completion/User/_perl_modules22
2 files changed, 79 insertions, 8 deletions
diff --git a/Completion/User/_perl b/Completion/User/_perl
new file mode 100644
index 000000000..848118431
--- /dev/null
+++ b/Completion/User/_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 \*.pl'
+}
+
+_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 - $_perl_config_vars
+}
+
+_perl "$@"
diff --git a/Completion/User/_perl_modules b/Completion/User/_perl_modules
index 272ebb5e4..8f6a5b882 100644
--- a/Completion/User/_perl_modules
+++ b/Completion/User/_perl_modules
@@ -7,16 +7,22 @@
 # Calculate all installed Perl modules.  The result is cached
 # for future use.
 #
+# Available styles:
+#
+# * try-to-use-pminst
+#
+#   Set this if you have pminst and want to use it.  The zsh code
+#   actually produces better results because pminst misses modules of
+#   the form Foo/bar/Baz.pm through its clumsy -d && /^[A-Z]/ && prune
+#   algorithm (the zsh code does almost the same, but only misses
+#   modules which don't begin with an uppercase letter).
 
-# Change this if you have pminst and want to use it.  The zsh code
-# actually produces better results because pminst misses modules of
-# the form Foo/bar/Baz.pm through its clumsy -d && /^[A-Z]/ && prune
-# algorithm (the zsh code does almost the same, but only misses modules
-# which don't begin with an uppercase letter).
-local try_to_use_pminst=0
+local opts
+zparseopts -D -a opts S: q
 
 if [[ ${+_perl_modules} -eq 0 ]]; then
-  if [[ $try_to_use_pminst -ne 0 ]] && which pminst >/dev/null; then
+  if zstyle -t ":completion:${curcontext}:modules" try-to-use-pminst \
+     && which pminst >/dev/null; then
     _perl_modules=( $(pminst) )
   else
     local inc libdir new_pms
@@ -43,4 +49,4 @@ fi
 
 local expl
 
-_wanted modules expl 'Perl modules' && compadd "$expl[@]" - $_perl_modules
+_wanted modules expl 'Perl modules' && compadd "$expl[@]" "$opts[@]" - $_perl_modules