* completion functions (was: 6-pws-2)
@ 1999-09-01 13:19 Sven Wischnowsky
1999-09-01 13:56 ` Peter Stephenson
0 siblings, 1 reply; 3+ messages in thread
From: Sven Wischnowsky @ 1999-09-01 13:19 UTC (permalink / raw)
To: zsh-workers
Peter Stephenson wrote:
> - Personally, I prefer one single completion function for a suite of
> related commands like cvs or pbm, since the accumulated clutter (and
> added time to process completion files the first time) is large. If it
> stays the way it is I will change the default for function installation
> to keep the subdirectories.
With a little help from `awk' this was relatively easy to build, so I
thought I just try to make us make a decision.
This is `User/_pbm' again, but containing mostly the stuff from the
`Pbmplus/*' files. I like the improved speed on startup and I think it
still is readable enough. Also note that with `_pbm' it is no problem
to allow users to override this with their own functions for such
commands because it is a post-pattern function anyway, so we get that
for free. If you have a special function for `pbmfoo' or whatever,
that will be used instead of `_pbm'.
Bye
Sven
--- oc/User/_pbm Wed Sep 1 14:57:33 1999
+++ Completion/User/_pbm Wed Sep 1 14:44:42 1999
@@ -0,0 +1,586 @@
+#compdef -P (p[bgpn]m*|*top[bgpn]m)
+
+local pat expl ret=1
+
+if [[ "$words[1]" = pnm* ]]; then
+ pat='*.(#i)p[bgp]m'
+elif [[ "$words[1]" = *top[bgpn]m ]]; then
+ pat="*.(#i)${words[1]%%top[bgpn]m}"
+else
+ pat="*.(#i)${words[1][1,3]}"
+fi
+
+if [[ $# -ne 0 || $+_in_pbm -ne 0 ]]; then
+ if (( ! $# )); then
+ _description expl 'picture file'
+ set -- "$expl[@]"
+ fi
+ _path_files "$@" -g "$pat" || _files "$@" -g '*.(#i)p[bgp]m'
+ return
+fi
+
+local _in_pbm=yes
+
+case "$words[1]" in
+asciitopnm)
+ _arguments '-d:divisor:' ':height:' ':width:' ':file: _pbm'
+ ;;
+
+fitstopgm)
+ _arguments '-image:image number:' ':file: _pbm'
+ ;;
+
+fitstopnm)
+ _arguments -{noraw,scanmax,printmax} '-image:image number:' \
+ '-min:minimum value:' '-max:maximum value:' ':file: _pbm'
+ ;;
+
+g3topbm)
+ _arguments -{kludge,reversebits,stretch} ':file: _pbm'
+ ;;
+
+giftopnm)
+ _arguments -{verbose,comments} '-image:image number:' \
+ ':file: _pbm'
+ ;;
+
+macptopbm)
+ _arguments '-extraskip:number of bytes to skip:' ':file: _pbm'
+ ;;
+
+pbmclean)
+ _arguments '-connect' ':file: _pbm'
+ ;;
+
+pbmmake)
+ _arguments -{white,black,gray} ':width:' ':height:'
+ ;;
+
+pbmmask)
+ _arguments '-expand' ':file: _pbm'
+ ;;
+
+pbmpscale)
+ _arguments ':scale factor:' ':file: _pbm'
+ ;;
+
+pbmreduce)
+ _arguments -{floyd,fs,threshold} '-value:threshold value:' \
+ ':reduction factor:' ':file: _pbm'
+ ;;
+
+pbmtext)
+ _arguments '-font:font file:_files -g \*.\(\#i\)pbm' '*:text:'
+ ;;
+
+pbmto10x)
+ _arguments '-h' ':file: _pbm'
+ ;;
+
+pbmtobg|pbmtobbnbg)
+ _arguments ':raster operation:' ':x position:' ':y position:'
+ ;;
+
+pbmtoepsi)
+ _arguments '-bbonly' ':file: _pbm'
+ ;;
+
+pbmtolj)
+ _arguments '-resolution:resolution:(75 100 150 300)' ':file: _pbm'
+ ;;
+
+pbmtoln03)
+ _arguments -{l:left,r:right,t:top,b:bottom}' margin:' \
+ '-f:form length:' ':file: _pbm'
+ ;;
+
+pbmtolps)
+ _arguments '-dpi:resolution:' ':file: _pbm'
+ ;;
+
+pbmtomacp)
+ _arguments -{l:left,r:right,t:top,b:bottom}' offset:' ':file: _pbm'
+ ;;
+
+pbmtopgm)
+ _arguments ':width:' ':height:' ':file: _pbm'
+ ;;
+
+pbmtopk)
+ # This could be improved...
+
+ _arguments '-s:design size:' '-C:coding scheme:' '-F:font family:' \
+ '-f:option file:_files' '-c:character number:' \
+ '-W:width:' '-H:height:' '-D:depth:' '-I:italic correction:' \
+ '-h:horizontal escapement:' '-v:vertical escapement:' \
+ '-x:x offset:' '-y:y offset:' \
+ ':pk file:_files -g \*.\(\#i\)pk' ':tfm file:_files -g \*.\(\#i\)tfm' \
+ '*:file: _pbm'
+ ;;
+
+pbmupc)
+ _arguments -s{1,2} ':product type:' ':manufacturer code:' \
+ ':product code:'
+ ;;
+
+pgmcrater)
+ _arguments '-number:number of craters:' '-gamma:factor:' \
+ -{height,ysize}:height: -{width,xsize}:width:
+ ;;
+
+pgmkernel)
+ _arguments '-weight:weight:' ':width:' ':height:'
+ ;;
+
+pgmnoise)
+ _arguments ':width:' ':height:'
+ ;;
+
+pgmnorm|ppmnorm)
+ _arguments '-bpercent:black percentage:' '-bvalue:black pixel value:' \
+ '-wpercent:white percentage:' '-wvalue:white pixel value:' \
+ ':file: _pbm'
+ ;;
+
+pgmoil)
+ _arguments '-n:smear size:' ':file: _pbm'
+ ;;
+
+pgmramp)
+ _arguments -{lr,tb,rectangle,ellipse} ':width:' ':height:'
+ ;;
+
+pgmtexture)
+ _arguments '-d:distance:' ':file: _pbm'
+ ;;
+
+pgmtopbm)
+ _arguments -{floyd,fs,threshold,dither8,d8,cluster3,c3,cluster4,c4,cluster8,c8} \
+ '-value:threshold value:' ':file: _pbm'
+ ;;
+
+pgmtoppm)
+ if [[ CURRENT -eq 2 ]]; then
+ if compset -P '?*-'; then
+ _x_color
+ return
+ fi
+ _x_color && ret=0
+
+ _description expl option
+ compadd "$expl[@]" - -map && ret=0
+
+ return ret
+ elif [[ CURRENT -eq 3 && "$words[2]" = -map ]]; then
+ _description expl 'map file'
+ _files "$expl[@]" -g '*.(#i)ppm'
+ else
+ _pbm
+ fi
+ ;;
+
+pktopbm)
+ _arguments ':pk file:_files -g \*.\(\#i\)pk' '-c:character number:' \
+ '*:file: _pbm'
+ ;;
+
+pnmalias)
+ _arguments '-bgcolor:background color:_x_color' \
+ '-fgcolor:foreground color:_x_color' \
+ -{f,b}only -{f,b}alias \
+ '-weight:central aliasing weight:' ':file: _pbm'
+ ;;
+
+pnmarith)
+ _arguments -{add,subtract,multiply} '*:file: _pbm'
+ ;;
+
+pnmcat)
+ _arguments -{white,black,leftright,lr,topbottom,tb,jtop,jbottom,jleft,jright} \
+ '*:file: _pbm'
+ ;;
+
+pnmcomp)
+ _arguments '-invert' '-xoff:x offset:' '-yoff:y offset:' \
+ '-alpha:alpha mask file:_files -g \*.\(\#i\)pgm' \
+ ':overlay file:_pbm' '*:file: _pbm'
+ ;;
+
+pnmconvol)
+ _arguments ':convolution file:_pbm' ':file: _pbm'
+ ;;
+
+pnmcrop)
+ _arguments -{white,black} ':file: _pbm'
+ ;;
+
+pnmcut)
+ _arguments ':x position:' ':y position:' ':width:' ':height:' ':file: _pbm'
+ ;;
+
+pnmdepth)
+ _arguments ':new maximum value:' ':file: _pbm'
+ ;;
+
+pnmenlarge)
+ _arguments ':enlargement factor:' ':file: _pbm'
+ ;;
+
+pnmflip)
+ _arguments -{leftright,lr,topbottom,tb,transpose,xy,rotate90,r90,ccw,rotate270,r270,cw} \
+ ':file: _pbm'
+ ;;
+
+pnmgamma)
+ if [[ CURRENT -eq 2 ]]; then
+ _message 'gamma value or red gamma value'
+ elif [[ CURRENT -eq 3 ]]; then
+ _pbm && ret=0
+ _message 'green gamma value'
+ elif [[ CURRENT -eq 4 ]]; then
+ _message 'blue gamma value'
+ elif [[ CURRENT -eq 5 ]]; then
+ _pbm && ret=0
+ fi
+
+ return ret
+ ;;
+
+pnmhistmap)
+ _arguments -{black,white,verbose} '-max:maximum value:' ':file: _pbm'
+ ;;
+
+pnmindex)
+ _arguments '-size:image size:' '-across:images per row:' \
+ '-colors:number of colors:' '-black' '*:file: _pbm'
+ ;;
+
+pnmmargin)
+ _arguments -{white,black} '-color:color: _x_color' \
+ ':border width:' ':file: _pbm'
+ ;;
+
+pnmnlfilt)
+ _arguments ':alpha value:' ':radius:' ':file: _pbm'
+ ;;
+
+pnmpad)
+ _arguments -{black,white} \
+ -{l-:left,r-:right,t-:top,b-:bottom}' border width:' \
+ ':file: _pbm'
+ ;;
+
+pnmpaste)
+ _arguments -{replace,or,and,xor} ':"from" picture file:_pbm' \
+ :{x,y}' position:' ':"into" picture file:_pbm'
+ ;;
+
+pnmrotate)
+ _arguments '-noantialias' ':rotation angle:' ':file: _pbm'
+ ;;
+
+pnmscale)
+ local scale
+
+ if [[ "$words[2]" = -* ]]; then
+ scale=()
+ else
+ scale=( ':scale factor:' )
+ fi
+
+ _arguments -{xsize,width}:width: -{ysize,height}:height: \
+ '-xscale:horizontal scale factor:' \
+ '-yscale:vertical scale factor:' \
+ '-xysize:width::height:' "$scale[@]" \
+ ':file: _pbm'
+ ;;
+
+pnmshear)
+ _arguments '-noantialias' ':shearing angle:' ':file: _pbm'
+ ;;
+
+pnmtile)
+ _arguments ':width:' ':height:' ':file: _pbm'
+ ;;
+
+pnmtoddif)
+ _arguments '-resolution:horizontal resolution::vertical resolution:' \
+ ':file: _pbm' ':ddif file:_files -g \*.\(\#i\)ddif'
+ ;;
+
+pnmtofits)
+ _arguments '-max:maximum value:' '-min:minimum value:' ':file: _pbm'
+ ;;
+
+pnmtops)
+ _arguments -{turn,noturn,rle,runlength} '-scale:scale factor:' \
+ '-dpi:output resolution:' \
+ '-width:page width:' '-height:page height' ':file: _pbm'
+ ;;
+
+pnmtorast)
+ _arguments -{standard,rle} ':file: _pbm'
+ ;;
+
+pnmtosgi)
+ _arguments -{verbatim,rle} '-imagename:image name:' ':file: _pbm'
+ ;;
+
+pnmtotiff)
+ _arguments -{none,packbits,lzw,g3,g4,2d,fill,msb2lsb,lsb2msb} \
+ '-predictor:LZW predictor:((1\:without\ differencing 2\:with\ differencing))' \
+ '-rowsperstrip:number of rows per strip:' ':file: _pbm'
+ ;;
+
+pnmtoxwd)
+ _arguments '-pseudodepth:depth of PseudoColor dumps:' '-directcolor' \
+ ':file: _pbm'
+ ;;
+
+ppm3d)
+ _arguments :{left,right}' picture file:_pbm' ':horizontal offset:'
+ ;;
+
+ppmbrighten)
+ _arguments '-n' '-s:saturation:' '-v:value:' ':file: _pbm'
+ ;;
+
+ppmchange)
+ _pbm && ret=0
+
+ if (( CURRENT & 1 )); then
+ _description expl 'new color'
+ else
+ _description expl 'old color'
+ fi
+
+ _x_color "$expl[@]" && ret=0
+
+ return ret
+ ;;
+
+ppmdim)
+ _arguments ':diminishing factor:' ':file: _pbm'
+ ;;
+
+ppmdist)
+ _arguments -{intensity,frequency} ':file: _pbm'
+ ;;
+
+ppmdither)
+ _arguments '-dim:matrix size:' \
+ '-red:number of red shades:' \
+ '-green:number of green shades:' \
+ '-blue:number of blue shades:' \
+ ':file: _pbm'
+ ;;
+
+ppmflash)
+ _arguments ':flash factor:' ':file: _pbm'
+ ;;
+
+ppmforge)
+ _arguments -{clouds,night} \
+ '-dimension:fractal dimension:' '-hour:hour angle:' \
+ '-inclination:inclination angle:' \
+ '-tilt:inclination angle:' \
+ '-mesh:FFT mesh size:' '-power:elevations power factor:' \
+ '-glaciers:glacier elevation:' '-ice:polar ice cap extent:' \
+ '-saturation:star color saturation:' \
+ '-seed:randum number seed:' \
+ '-stars:minimum star pixel percentage:' \
+ -{width,xsize}:width: -{height,ysize}:height:
+ ;;
+
+ppmmake)
+ _arguments ':color: _x_color' ':width:' ':height:'
+ ;;
+
+ppmmix)
+ _arguments ':fade factor:' ':file: _pbm' ':file: _pbm'
+ ;;
+
+ppmntsc)
+ _arguments ':dim factor:' ':file: _pbm'
+ ;;
+
+ppmpat)
+ _arguments -{gingham{2,3},g{2,3},madras,tartan,poles,squig,camo,anticamo} \
+ ':width:' ':height:'
+ ;;
+
+ppmquant)
+ local opt=yes
+
+ if [[ "$words[2]" = -(fs|floyd) ]]; then
+ (( CURRENT-- ))
+ shift 1 words
+ opt=''
+ fi
+
+ if [[ CURRENT -eq 2 ]]; then
+ _description expl option
+ if [[ -n "$opt" ]]; then
+ compadd "$expl[@]" - -map -fs -floyd && ret=0
+ else
+ compadd "$expl[@]" - -map && ret=0
+ fi
+ _message 'number of colors'
+
+ return ret
+ elif [[ CURRENT -eq 3 && "$words[2]" = -map ]]; then
+ _description expl 'map file'
+ _files "$expl[@]" -g '*.(#i)ppm'
+ else
+ _pbm
+ fi
+ ;;
+
+ppmquantall)
+ _arguments ':number of colors:' '*:file: _pbm'
+ ;;
+
+ppmshift)
+ _arguments ':shift value:' ':file: _pbm'
+ ;;
+
+ppmspread)
+ _arguments ':maximum spread amount:' ':file: _pbm'
+ ;;
+
+ppmtoacad)
+ _arguments -{dxb,poly,white,8} '-background:background color:_x_color' \
+ '-aspect:pixel aspect ratio:' ':file: _pbm'
+ ;;
+
+ppmtobmp)
+ _arguments -{os2,windows} ':file: _pbm'
+ ;;
+
+ppmtogif)
+ _arguments '-interlace' ':file: _pbm'
+ ;;
+
+ppmtoicr)
+ _arguments '-windowname:window name:' '-expand:expansion factor:' \
+ '-display:display screen:' '-rle' ':file: _pbm'
+ ;;
+
+ppmtoilbm)
+ _arguments '-hamif' ':file: _pbm'
+ ;;
+
+ppmtomap)
+ _arguments -s{ort,quare} ':file: _pbm'
+ ;;
+
+ppmtomitsu)
+ _arguments '-sharpness:sharpness:(1 2 3 4)' \
+ '-enlarge:enlargement factor:(1 2 3)' \
+ '-media:output media (default\: 1184x1350):((A\:1216x1350 A4\:1184x1452 AS\:1216x1650 A4S\:1184x1754))' \
+ '-copy:number of copies:(1 2 3 4 5 6 7 8 9)' \
+ -{dpi300,tiny} ':file: _pbm'
+ ;;
+
+ppmtopj)
+ _arguments '-gamma:gamma value:' '-xpos:x position:' -{rle,center} \
+ '-ypos:y position:' '-back:background brightness:(dark lite)' \
+ '-render:rendering algorithm:(none snap bw dither diffuse monodither monodiffuse clusterdither monoclusterdither)' \
+ ':file: _pbm'
+ ;;
+
+ppmtopjxl)
+ _arguments -{nopack,presentation,dark,diffuse,cluster,dither} \
+ '-gamma:gamma value:' \
+ '-xshift:x shift:' '-yshift:y shift:' \
+ -{xscale:x,yscale:y}' scale factor:' \
+ -{xsize,width}:width: -{ysize,height}:height: \
+ ':file: _pbm'
+ ;;
+
+ppmtosixel)
+ _arguments -{raw,margin} ':file: _pbm'
+ ;;
+
+ppmtotga)
+ _arguments -{mono,cmap,rgb,norle} ':file: _pbm'
+ ;;
+
+ppmtouil|ppmtoxpm)
+ _arguments '-name:name prefix:' ':file: _pbm'
+ ;;
+
+ppmtoyuvsplit)
+ _arguments ':base name:' ':file: _pbm'
+ ;;
+
+psidtopgm)
+ _arguments ':width:' ':height:' ':bits per sample:' \
+ ':postscript file:_files -g \*.\(\#i\)\(ps\|eps\)'
+ ;;
+
+pstopnm)
+ _arguments -{forceplain,help,landscape,portrait,nocrop,pbm,pgm,ppm,verbose} \
+ '-llx:loxer left x position:' '-lly:lower left y position:' \
+ '-urx:upper right x position:' '-ury:upper right y position:' \
+ '-xborder:x border fraction:' '-yborder:y border fraction:' \
+ '-xmax:maximum width:' '-ymax:maximum height' \
+ '-xsize:width:' '-ysize:height:' \
+ ':postscript file:_files -g \*.\(\#i\)\(ps\|eps\)'
+ ;;
+
+rawtopgm)
+ _arguments '-headerskip:header bytes to skip:' \
+ '-rowskip:row padding to skip:' \
+ ':width:' ':height:' ':grayscale bytes:'
+ ;;
+
+rawtoppm)
+ _arguments '-headerskip:header bytes to skip:' \
+ '-rowskip:row padding to skip:' \
+ -{rgb,rbg,grb,gbr,brg,bgr,interpixel,interrow} \
+ ':width:' ':height:' ':grayscale bytes:'
+ ;;
+
+rgb3toppm)
+ if [[ CURRENT -eq 2 ]]; then
+ expl='red picture file'
+ elif [[ CURRENT -eq 3 ]]; then
+ expl='green picture file'
+ elif [[ CURRENT -eq 4 ]]; then
+ expl='blue picture file'
+ fi
+
+ if [[ -n "$expl" ]]; then
+ _description expl "$expl"
+ _files "$expl" -g '*.(#i)pgm'
+ fi
+ ;;
+
+sgitopnm)
+ _arguments '-verbose' ':file: _pbm'
+ ;;
+
+sldtoppm)
+ _arguments -{adjust,dir,info,verbose} \
+ -{width,xsize}:width: -{height,ysize}:height: \
+ '-scale:scale factor:' \
+ '-lib:slide name:' '-Lib:slide name:' ':file: _pbm'
+ ;;
+
+yuvsplittoppm)
+ _arguments ':base name:' ':width:' ':height:' '-ccir601'
+ ;;
+
+yuvtoppm)
+ _arguments ':width:' ':height:' ':image bytes:'
+ ;;
+
+zeisstopnm)
+ _arguments -p{g,p}m ':file: _pbm'
+ ;;
+
+*)
+ _description expl 'picture file'
+ _path_files "$expl[@]" -g "$pat" || _files "$expl[@]" -g '*.(#i)p[bgp]m'
+esac
--
Sven Wischnowsky wischnow@informatik.hu-berlin.de
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: completion functions (was: 6-pws-2)
1999-09-01 13:19 completion functions (was: 6-pws-2) Sven Wischnowsky
@ 1999-09-01 13:56 ` Peter Stephenson
0 siblings, 0 replies; 3+ messages in thread
From: Peter Stephenson @ 1999-09-01 13:56 UTC (permalink / raw)
To: zsh-workers
Sven Wischnowsky wrote:
> With a little help from `awk' this was relatively easy to build, so I
> thought I just try to make us make a decision.
>
> This is `User/_pbm' again, but containing mostly the stuff from the
> `Pbmplus/*' files.
I like it this way --- particularly since it replaces a 100 functions, and
you can compare the different behaviour for each function just by looking
through the one file. Does anyone have anything to say for the other way,
before I delete the Pbmplus subdirectory? Also, would it help to add a
comment pointing out you can override individual completions by defining an
appropriate function?
(By the way, mail is still screwed up here. I've reported it but it
usually takes a month or two of arguing to get anyone to do anything, by
which time I won't be here. So please keep sending personal mail to
pws@ifh.de until I say otherwise.)
--
Peter Stephenson <pws@ibmth.df.unipi.it> Tel: +39 050 844536
WWW: http://www.ifh.de/~pws/
Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: completion functions (was: 6-pws-2)
@ 1999-09-02 11:11 Sven Wischnowsky
0 siblings, 0 replies; 3+ messages in thread
From: Sven Wischnowsky @ 1999-09-02 11:11 UTC (permalink / raw)
To: zsh-workers; +Cc: pws
Peter Stephenson wrote:
> Sven Wischnowsky wrote:
> > With a little help from `awk' this was relatively easy to build, so I
> > thought I just try to make us make a decision.
> >
> > This is `User/_pbm' again, but containing mostly the stuff from the
> > `Pbmplus/*' files.
>
> I like it this way --- particularly since it replaces a 100 functions, and
> you can compare the different behaviour for each function just by looking
> through the one file. Does anyone have anything to say for the other way,
> before I delete the Pbmplus subdirectory? Also, would it help to add a
> comment pointing out you can override individual completions by defining an
> appropriate function?
Maybe. Just to rub it in.
Bye
Sven
diff -u Completion.old/User/_pbm Completion/User/_pbm
--- Completion.old/User/_pbm Thu Sep 2 11:37:39 1999
+++ Completion/User/_pbm Thu Sep 2 13:10:15 1999
@@ -1,5 +1,11 @@
#compdef -P (p[bgpn]m*|*top[bgpn]m)
+# Completion for all (or most, you'll never know) pbmplus commands.
+# For some of them there are special cases in the biggish `case' below.
+# Note that since this function is a post-pattern function, these
+# defaults can be overridden by simple defining completion functions
+# for those commands whose arguments you want to complete differently.
+
local pat expl ret=1
if [[ "$words[1]" = pnm* ]]; then
--
Sven Wischnowsky wischnow@informatik.hu-berlin.de
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~1999-09-02 11:11 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-09-01 13:19 completion functions (was: 6-pws-2) Sven Wischnowsky
1999-09-01 13:56 ` Peter Stephenson
1999-09-02 11:11 Sven Wischnowsky
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).