From mboxrd@z Thu Jan 1 00:00:00 1970 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes Message-ID: <19990126184200.B27794@fysh.org> Date: Tue, 26 Jan 1999 18:42:00 +0000 From: Phil Pennock To: Zsh Development Workers Subject: Example function Mail-Followup-To: Zsh Development Workers Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.91.2 Organisation: Organisation? Here? No, over there ----> X-Disclaimer: Any views expressed in this message, where not explicitly attributed otherwise, are mine and mine alone. Such views do not necessarily coincide with those of any organisation or company with which I am or have been affiliated. X-Mailing-List: 5032 Hi, A couple of months back zefram decided that he wanted one of my sicker zsh shell functions for the examples. I gave it to him then. Here it is again for inclusion. It's a zless which automatically determines from the file extension which decompressor to use. The comments explain it. This has evolved over about a year and a half, hence my needing help sorting out the array bit. Uhm, have fun or whatever. Peter, any chance of this going in your next sub-distrib? Thanks PS: Note that the last line is 108 chars long; your mailer may interfere? -----------------------------< cut here >------------------------------- #!/usr/bin/zsh -f # # zsh function script to run less on various inputs, decompressing as required. # Author: Phil Pennock. zsh-hacks@athenaeum.demon.co.uk # Thanks to zefram@fysh.org for a great deal of help in sorting this out, # ie wrt syntax for unsetting members of arrays and eval "$(...)" when I # asked for something better than . =(...) # Other than that the whole sick beauty is mine. # # Use -zforce to pass through a display-formatting command # zless -zforce 'bzip2 -dc' foo-no-dotbz2 # zless -zforce 'od -hc' foo-binfile # # If you can understand all of this without reference to zshexpn(1) # and zshparam(1) then you either have a photographic memory or you # need to get out more. # [[ $# -ge 1 ]] || return local -i i loi max local dispfunc lessopts set -A dispfunc set -A lessopts loi=1 max=$[$#+1] for ((i=1; i != $max ; ++i)) do dispfunc[i]='<' [[ $argv[i] = \-zforce ]] && { dispfunc[i+2]="$argv[i+1]" argv[i,i+1]=() dispfunc[i,i+1]=() let max-=2 continue } [[ $argv[i] = \-* ]] && { lessopts[loi++]="$argv[i]" argv[i,i]=() dispfunc[i,i]=() let max-=1 let i-=1 continue } [[ $argv[i] = *.gz ]] && dispfunc[i]=zcat [[ $argv[i] = *.bz2 ]] && dispfunc[i]='bzip2 -dc' [[ $argv[i] = *.Z ]] && dispfunc[i]=zcat [[ $argv[i] = *.bz ]] && dispfunc[i]='bzip -dc' done eval "$(print command less "${(@)lessopts}" "=($dispfunc[i=1] \"${(@Nej:\") =($dispfunc[++i] \":)argv}\")")" -----------------------------< cut here >------------------------------- -- --> Phil Pennock ; GAT d- s+:+ a23 C++(++++) UL++++/I+++/S+++/B++/H+$ P++@$ L+++ E-@ W(+) N>++ o !K w--- O>+ M V !PS PE Y+ PGP+ t-- 5++ X+ R !tv b++>+++ DI+ D+ G+ e+ h* r y?