Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH: find .pod files for perldoc better



This enhances completion for perldoc so that it locates .pod files in
the include path.  Currently only .pm files are searched for.  However,
followers of Perl 6 will note files with names like Perl6/Overview.pod
are appearing, and perldoc will locate them.

Passing arguments to completion functions is unnecessarily difficult; as
I noted in _perforce:

  # Hack: if there is a job view, it is at the end.
  # This is nasty, it's really unnecessarily difficult to
  # pass arguments within completion functions...

I think, therefore, the way I've done it here is the most likely to
work.

Index: Completion/Unix/Command/_perldoc
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_perldoc,v
retrieving revision 1.4
diff -u -r1.4 _perldoc
--- Completion/Unix/Command/_perldoc	8 Jun 2005 12:45:35 -0000	1.4
+++ Completion/Unix/Command/_perldoc	2 Aug 2006 22:13:31 -0000
@@ -49,7 +49,7 @@
           _files -g "*.(pod|pm)(-.)" && ret=0
     else
       _alternative \
-	'modules:module: _perl_modules' \
+	'modules:module: _perl_modules -tP' \
 	'pods:base pod: _perl_basepods' \
 	'files:module or .pod file:_files -g "*.(pod|pm)(-.)"' && ret=0
     fi
Index: Completion/Unix/Type/_perl_modules
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Type/_perl_modules,v
retrieving revision 1.4
diff -u -r1.4 _perl_modules
--- Completion/Unix/Type/_perl_modules	8 Jun 2005 12:45:36 -0000	1.4
+++ Completion/Unix/Type/_perl_modules	2 Aug 2006 22:13:31 -0000
@@ -6,7 +6,12 @@
 #
 # Calculate all installed Perl modules.  The result is cached
 # for future use.
-#
+# 
+# Options:
+# 
+# -t[types]: indicate file types; currently the only one is -tP,
+# to include .pod files as well as modules.
+# 
 # Available styles:
 #
 # * try-to-use-pminst
@@ -20,22 +25,28 @@
 _perl_modules () {
   # Set a sensible default caching policy.  This has to be done inside
   # this function otherwise we wouldn't know the context for the style.
-  local update_policy
+  local update_policy sufpat=".pm" with_pod
   zstyle -s ":completion:${curcontext}:" cache-policy update_policy
   if [[ -z "$update_policy" ]]; then
     zstyle ":completion:${curcontext}:" cache-policy \
       _perl_modules_caching_policy
   fi
 
+  if [[ $argv[-1] = -tP ]]; then
+    argv=("${(@)argv[1,-2]}")
+    sufpat="(.pm|.pod)"
+    with_pod=_with_pod
+  fi
+
   local perl=${words[1]%doc} perl_modules
   if whence $perl >/dev/null; then
-    perl_modules=_${${perl//[^[:alnum:]]/_}#_}_modules
+    perl_modules=_${${perl//[^[:alnum:]]/_}#_}_modules$with_pod
   elif (( ${+commands[perl]} )); then
     perl=perl
-    perl_modules=_perl_modules
+    perl_modules=_perl_modules$with_pod
   else
     perl=
-    perl_modules=_unknown_perl_modules
+    perl_modules=_unknown_perl_modules$with_pod
   fi
 
   if ( [[ ${(P)+perl_modules} -eq 0 ]] || _cache_invalid $perl_modules ) &&
@@ -68,7 +79,7 @@
 
         # Find all modules
         if [[ -d $libdir && -x $libdir ]]; then
-          new_pms=( $libdir/{[A-Z]*/***/,}*.pm~*blib* )
+          new_pms=( $libdir/{[A-Z]*/***/,}*${~sufpat}~*blib* )
           new_pms=( "${(@)new_pms##$libdir/##}" )
         fi
 


-- 
Peter Stephenson <p.w.stephenson@xxxxxxxxxxxx>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/



Messages sorted by: Reverse Date, Date, Thread, Author