about summary refs log tree commit diff
path: root/Functions/Example/zless
blob: 58103bd8cf412065616f6f8921753e2fc1bc9cba (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/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 $*