mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-19 13:33:52 +01:00
38 lines
1.1 KiB
Bash
38 lines
1.1 KiB
Bash
#!/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
|
|
# Modified by Bart Schaefer.
|
|
# 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 . =(...)
|
|
#
|
|
# 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.
|
|
#
|
|
|
|
emulate -R zsh
|
|
setopt localoptions
|
|
|
|
[[ $# -ge 1 ]] || return
|
|
local lessopts
|
|
set -A lessopts
|
|
integer i=1 loi=1
|
|
while ((i <= $#))
|
|
do
|
|
case $argv[i] in
|
|
-zforce) argv[i,i+2]=("=($argv[i+1] \"$argv[i+2]\")"); ((++i));;
|
|
-*) lessopts[loi++]=\"$argv[i]\"; argv[i]=(); continue;;
|
|
*.(gz|Z)) argv[i]="=(zcat \"$argv[i]\")";;
|
|
*.bz2) argv[i]="=(bzip2 -dc \"$argv[i]\")";;
|
|
*.bz) argv[i]="=(bzip -dc \"$argv[i]\")";;
|
|
esac
|
|
((++i))
|
|
done
|
|
eval command less $lessopts $*
|