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

Re: PATCH: _unexpand



On 7/9/05, Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
> On Jul 9,  6:18pm, Travis Spencer wrote:
> } Subject: PATCH: _unexpand
> }
> } Here is a patch to add completion for the UNIX and Linux version
> of
> } unexpand.
> 
> As the completion functions are preferentially installed all into a
> single directory (it's an extra configure option to install them in
> separate subdirectories), it is necessary to pick one location for
> any function -- I suggest Completion/Unix/Command/_unexpand in this
> case -- and have the function internally decide which version of the
> command it should be completing for.

Glancing over the CVS repository's directory structure and some posts
about MAC-only programs made me unsure. Good to know. Thanks.

> In other words, combine these into one file with an "if" test of
> some sort, and then they could be added to the distribution.

I looked through the existing functions in the distribution, and I saw
a function that looked pretty good -- _pick_variant.  That sounded
like it might be useful, so I figured out how it worked and coded it
up.  It worked fine on my Linux box but not on my Solaris system.  In
my Sol environment, I have the FSF's unexpand at the head of my path.
I wanted to test it with the Sun version, so I reexported my PATH and
rehashed.  To my surprise, the tab completion still showed the GNU
flags.  I double, triple and even quadruple checked my use of the
_pick_variant function, and I'm sure I was calling it correctly.  I
think there is a bug in that function.  Here is a typescript showing
what I did.  The first run (2345-2349) in the output is with the
non-_pick_variant version of my completion.  The second run
(2350-2354), uses _pick_variant.

Script started on Sat Jul 09 22:35:28 2005
2345 tspencer@xxxxxxxxx (~) > unexpand --version
unexpand (coreutils) 5.2.1
Written by David MacKenzie.

Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2346 tspencer@xxxxxxxxx (~) > unexpand -
--all         -a  -- convert all whitespace, instead of just initial whitespace                                                             
--first-only      -- convert only leading sequences of whitespace                                                                           
--help            -- display help message and exit                                                                                          
--tabs        -t  -- use comma separated list of tab positions
--version         -- output version information and exit
2346 tspencer@xxxxxxxxx (~) > export PATH=/usr/bin:$PATH ; rehash
2347 tspencer@xxxxxxxxx (~) > unexpand --version
unexpand: illegal option -- -
usage: unexpand [-a ] [-t tablist] [file ...]
2348 tspencer@xxxxxxxxx (~) > unexpand -
-a  -- convert all whitespace, instead of just initial whitespace
-t  -- use comma separated list of tab positions
2349 tspencer@xxxxxxxxx (~) > 

script done on Sat Jul 09 22:36:25 2005
Script started on Sat Jul 09 22:36:37 2005
2350 tspencer@xxxxxxxxx (~) > unexpand --version
unexpand (coreutils) 5.2.1
Written by David MacKenzie.

Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2351 tspencer@xxxxxxxxx (~) > unexpand -
--all         -a  -- convert all whitespace, instead of just initial whitespace                                                             
--first-only      -- convert only leading sequences of whitespace                                                                           
--help            -- display help message and exit                                                                                          
--tabs        -t  -- use comma separated list of tab positions
--version         -- output version information and exit
2351 tspencer@xxxxxxxxx (~) > export PATH=/usr/bin:$PATH; rehash
2352 tspencer@xxxxxxxxx (~) > unexpand --version
unexpand: illegal option -- -
usage: unexpand [-a ] [-t tablist] [file ...]
2353 tspencer@xxxxxxxxx (~) > unexpand -
--all         -a  -- convert all whitespace, instead of just initial whitespace                                                             
--first-only      -- convert only leading sequences of whitespace                                                                           
--help            -- display help message and exit                                                                                          
--tabs        -t  -- use comma separated list of tab positions                                                                              
--version         -- output version information and exit
2354 tspencer@xxxxxxxxx (~) > 

script done on Sat Jul 09 22:37:34 2005

See how _pick_variant continues to output the GNU options even after
reexporting the PATH and rehashing?  BTW, this was run with zsh 4.2.0,
but _pick_variant doesn't seem to be any different in the latest CVS.

At any rate, here is the updated patch.

--- /dev/null	Sat Jul  9 22:45:45 2005
+++ Completions/Unix/Command/_unexpand	Sat Jul  9 22:46:12 2005
@@ -0,0 +1,43 @@
+#compdef unexpand
+#
+# $Id:$
+#
+# Copyright (C) 2005 Travis L. Spencer
+# ALL RIGHTS RESERVED
+#
+# See the file LICENCE in the root of the zsh distribution for
+# licensing information.
+#
+
+local all tabs ret=1
+local -a args
+
+all="convert all whitespace, instead of just initial whitespace"
+tabs="use comma separated list of tab positions"
+args=( 
+    "(--all)-a[$all]"
+    "(--tabs)-t[$tabs]:tablist"
+    "*:file:_files"
+)
+
+#if _pick_variant gnu="Free Soft" unix --version; then
+if (unexpand --version 2>&1 | grep -i "Free Soft") > /dev/null ; then
+    args+=(
+        "(-a)--all[$all]"
+        "--first-only[convert only leading sequences of whitespace]"
+        "(-t)--tabs=[$tabs]:tablist"
+        "(* -)--help[display help message and exit]"
+        "(* -)--version[output version information and exit]"
+    )
+fi
+
+_arguments "$args[@]" && ret=0
+
+return ret
+
+: <<EMACS_LOCAL_VARIABLES
+Local Variables:
+mode: shell-script
+mode: flyspell-prog
+End:
+EMACS_LOCAL_VARIABLES



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