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

Re: info completion doesn't complete on local info files



On Saturday 07 October 2006 13:31, Vincent Lefevre wrote:
> On 2006-10-07 10:30:11 +0400, Andrey Borzenkov wrote:
> > According to man info, it should be 'info -f mprf.info'; that is
> > also how I wrote completion :) Do you have reference to more up to
> > date info documentation?
>
> No, but giving a filename (relative to INFOPATH, absolute or starting
> with ./) works without the -f option. I think this represent the top
> node of an info file, hence the behavior.

Would be nice if it were documented (of course not something someone dealing 
with Zsh has the rights to complaint about :)

How does it work for you?

BTW as I understand _arguments sets up explanation also for -> cases; any 
chance to access them? Passing empty message (:::->foo) is an error; but 
accidentally supplying different messages in _arguments and later in direct 
completion calls (like ::menu items:->items and later on _describe 'menu 
item') makes it believe there are two set of matches

attached due to line length.
Index: Completion/Unix/Command/_texinfo
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_texinfo,v
retrieving revision 1.5
diff -u -p -r1.5 _texinfo
--- Completion/Unix/Command/_texinfo	21 Jan 2004 13:53:29 -0000	1.5
+++ Completion/Unix/Command/_texinfo	7 Oct 2006 12:03:42 -0000
@@ -21,7 +21,7 @@ case $service in
       '--subnodes[recursively output menu items]' \
       '--vi-keys[use Vi-like key bindings]' \
       '(: -)--version[display version information]' \
-      '(--apropos -h --help -O --output --version)*::menu items:->item' && ret=0
+      '(--apropos -h --help -O --output --version)*::menu item:->item' && ret=0
 
     info=( $info {(kv)opt_args[(I)(-d|--directory|-f|--file)]} )
   ;;
@@ -146,11 +146,25 @@ esac
 
 case $state in
   item )
-    local -a items
+    local -a items tags expl infopath
+    (( $#INFOPATH )) && infopath=( -W ${s/:/INFOPATH} )
 
-    items=(${${(M)${${(f)"$(${info} --output - ${words[1,CURRENT-1]} 2>/dev/null)"}[1,(r)[[:space:]]#--- The Detailed Node Listing ---[[:space:]]#]}:#\* *~\* Menu:*}:/(#b)\*[[:space:]]##([^:]##):(#B)( \(?##\)[^.]#.|(:|))[[:space:]]#(#b)(*)[[:space:]]#/$match[1]${match[2]:+:}$match[2]})
+    tags=(items)
+    if [[ $CURRENT -eq 1 ]]; then
+	tags+=files
+    fi
+
+    _tags $tags
+    while _tags; do
+	if _requested files expl 'info file'; then
+	    _files "$expl[@]" $infopath -g '*.info' && ret=0
+	fi
+	if _requested items; then
+	    items=(${${(M)${${(f)"$(${info} --output - ${words[1,CURRENT-1]} 2>/dev/null)"}[1,(r)[[:space:]]#--- The Detailed Node Listing ---[[:space:]]#]}:#\* *~\* Menu:*}:/(#b)\*[[:space:]]##([^:]##):(#B)( \(?##\)[^.]#.|(:|))[[:space:]]#(#b)(*)[[:space:]]#/$match[1]${match[2]:+:}$match[2]})
 
-    _describe -t items "menu items" items && ret=0
+	    _describe -t items "menu item" items && ret=0
+	fi
+    done
   ;;
 esac
 

Attachment: pgpJ6u0tPs8PA.pgp
Description: PGP signature



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