From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20535 invoked from network); 11 Aug 1999 13:46:15 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 11 Aug 1999 13:46:14 -0000 Received: (qmail 19754 invoked by alias); 11 Aug 1999 13:46:01 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 7420 Received: (qmail 19747 invoked from network); 11 Aug 1999 13:46:00 -0000 Date: Wed, 11 Aug 1999 15:45:59 +0200 (MET DST) Message-Id: <199908111345.PAA07735@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: Sven Wischnowsky's message of Wed, 11 Aug 1999 12:54:02 +0200 (MET DST) Subject: Re: PATCH: _ps, _pdf and _pspdf. I wrote: > This is a first simple solution. Now I'm thinking aabout chaging the > uses of _compskip so that one can say `do not try any other completion > function' (like we have it now), but can also say `use a completion > function defined for the command itself, but don't use -default-'. > Then we can give some of these commands their own functions, too. This does that. There is also a hunk in zle_tricky.c: seems I forgot to reset the group to `default' when compgen was called without a -[JV] option. The change to _compskip isn't really used yet -- I found it easier to stuff everything into _pbm instead of adding loads of functions containing only a compadd for a couple of options. Bye Sven diff -u os/Zle/zle_tricky.c Src/Zle/zle_tricky.c --- os/Zle/zle_tricky.c Mon Aug 9 10:41:03 1999 +++ Src/Zle/zle_tricky.c Wed Aug 11 15:13:34 1999 @@ -5338,6 +5338,10 @@ offs = lip + lp; cc->refc++; ccont = 0; + if (!cc->ylist && !cc->gname) { + endcmgroup(NULL); + begcmgroup("default", 0); + } makecomplistor(cc, str, lincmd, lip, 0); offs = ooffs; isuf = oisuf; diff -u od/Zsh/compsys.yo Doc/Zsh/compsys.yo --- od/Zsh/compsys.yo Mon Aug 9 10:41:11 1999 +++ Doc/Zsh/compsys.yo Wed Aug 11 15:39:48 1999 @@ -334,8 +334,12 @@ item(tt(-first-))( for adding completions before any other other completion functions are tried (similar to the `tt(-T)' flag of tt(compctl)); if this -function sets the tt(_compskip) parameter to any value, the completion -system will not call any other function to generate matches. +function sets the tt(_compskip) parameter to `tt(all)', no other +completion functions will be called, if it is set to a string +containing `tt(patterns)', no pattern completion functions will be +called, and if it is set to a string containing `tt(default)' the +function for the `tt(-default-)' context will not be called, but +functions defined for commands will. ) item(tt(-default-))( for generating completions when no special completion function is used @@ -684,8 +688,9 @@ function. When calling a function defined for a pattern, this function also -checks if the parameter tt(_compskip) is set. If it was set by the -function called, no further completion functions are called. With this +checks if the parameter tt(_compskip) is set and uses the value in the +same way it is used after calling the completion function for the +tt(-first-) context. With this one can write a pattern completion function that keeps other functions from being tried simply by setting this parameter to any value. ) diff -u -r oc/Base/_first Completion/Base/_first --- oc/Base/_first Wed Aug 11 11:58:00 1999 +++ Completion/Base/_first Wed Aug 11 13:09:14 1999 @@ -55,7 +55,7 @@ # # on menu-completion and make sure that no other # # completion function is called by setting _compskip. # compstate[insert]=menu -# _compskip=1 +# _compskip=all # return # fi # (( i++ )) diff -u -r oc/Builtins/_zftp Completion/Builtins/_zftp --- oc/Builtins/_zftp Wed Aug 11 11:58:03 1999 +++ Completion/Builtins/_zftp Wed Aug 11 13:09:33 1999 @@ -1,7 +1,7 @@ #compdef -p zf* # Don't try any more completion after this. -_compskip=1 +_compskip=all # Completion for zftp builtin and zf* functions. The functions # zfcd_match and zfget_match (used for old-style completion) diff -u -r oc/Core/_complete Completion/Core/_complete --- oc/Core/_complete Wed Aug 11 11:58:04 1999 +++ Completion/Core/_complete Wed Aug 11 13:11:18 1999 @@ -16,13 +16,11 @@ fi # An entry for `-first-' is the replacement for `compctl -T' -# Completion functions may set `_compskip' to any value to make the -# main loops stop calling other completion functions. comp="$_comps[-first-]" if [[ ! -z "$comp" ]]; then "$comp" - if (( $+_compskip )); then + if [[ "$_compskip" = all ]]; then unset _compskip (( compstate[nmatches] )) return @@ -55,8 +53,16 @@ # If not, we use default completion, if any. - [[ -z "$comp" ]] && comp="$_comps[-default-]" + if [[ -z "$comp" ]]; then + if [[ "$_compskip" = *default* ]]; then + unset _compskip + return 1 + fi + comp="$_comps[-default-]" + fi [[ -z "$comp" ]] || "$comp" fi + +unset _compskip (( compstate[nmatches] )) diff -u -r oc/Core/_main_complete Completion/Core/_main_complete --- oc/Core/_main_complete Wed Aug 11 11:58:04 1999 +++ Completion/Core/_main_complete Wed Aug 11 13:44:53 1999 @@ -42,7 +42,7 @@ # state than the global one for which you are completing. -local comp ret=1 +local comp ret=1 _compskip setopt localoptions nullglob rcexpandparam unsetopt markdirs globsubst shwordsplit nounset ksharrays @@ -79,5 +79,7 @@ _lastcomp[isuffix]="$ISUFFIX" _lastcomp[qiprefix]="$QIPREFIX" _lastcomp[qisuffix]="$QISUFFIX" + +unset _compskip return ret diff -u -r oc/Core/_normal Completion/Core/_normal --- oc/Core/_normal Wed Aug 11 11:58:05 1999 +++ Completion/Core/_normal Wed Aug 11 13:06:33 1999 @@ -29,17 +29,19 @@ # See if there are any matching pattern completions. -for i in "$_patcomps[@]"; do - pat="${i% *}" - val="${i#* }" - if [[ "$cmd1" == $~pat || "$cmd2" == $~pat ]]; then - "$val" && ret=0 - if (( $+_compskip )); then - unset _compskip - return ret +if [[ "$_compskip" != *patterns* ]]; then + for i in "$_patcomps[@]"; do + pat="${i% *}" + val="${i#* }" + if [[ "$cmd1" == $~pat || "$cmd2" == $~pat ]]; then + "$val" && ret=0 + if [[ "$_compskip" = *patterns* || "$_compskip" = all ]]; then + unset _compskip + return ret + fi fi - fi -done + done +fi # Now look up the two names in the normal completion array. @@ -54,9 +56,15 @@ # And generate the matches, probably using default completion. if [[ -z "$comp" ]]; then + if [[ "$_compskip" = *default* ]]; then + unset _compskip + return 1 + fi name=-default- comp="$_comps[-default-]" fi [[ -z "$comp" ]] || "$comp" && ret=0 + +unset _compskip return ret diff -u -r oc/User/_colors Completion/User/_colors --- oc/User/_colors Wed Aug 11 15:42:15 1999 +++ Completion/User/_colors Wed Aug 11 15:35:03 1999 @@ -0,0 +1,24 @@ +#autoload + +if (( ! $+_color_cache )); then + local file + + # Cache of color names doesn't exist yet, create it. + + if [[ -f /usr/lib/X11/rgb.txt ]]; then + file=/usr/lib/X11/rgb.txt + elif [[ -f /usr/local/lib/X11/rgb.txt ]]; then + file=/usr/local/lib/X11/rgb.txt + fi + + if [[ -n "$file" ]]; then + _color_cache=( "${(@)${(@f)$(< $file)}[2,-1]##* }" ) + else + + # Stupid default value. + + _color_cache=(white black gray red blue green) + fi +fi + +compadd - "$_color_cache[@]" diff -u -r oc/User/_pbm Completion/User/_pbm --- oc/User/_pbm Wed Aug 11 15:42:04 1999 +++ Completion/User/_pbm Wed Aug 11 15:34:04 1999 @@ -1,8 +1,147 @@ #compdef -p p[bgpn]m* -local pat +local pat opts ret=1 -_compskip=1 +# No other completion functions, please. + +_compskip=all + +if (( ! $+_pbm_options )); then + + # Most of the stuff is done by table lookup in these arrays. + + typeset -gA _pbm_options _pbm_arg_options + + # Options with arguments, per command. + + _pbm_arg_options=( + pbmreduce 'value' + pbmtext 'font:_files:-g:*.(#i)pbm' + pbmtolj 'resolution' + pbmtolps 'dpi' + pbmtomacp 'l r t b' + pgmcrater 'number height ysize width xsize gamma' + pgmkernel 'weight' + pgmnorm 'bpercent bvalue wpercent wvalue' + pgmoil 'n' + pgmtexture 'd' + pgmtopbm 'value' + pgmtoppm 'map:_files:-g:*.(#i)ppm' + ppmbrighten 's v' + ppmdither 'dim red green blue' + ppmforge 'dimension hour inclination tilt mesh power glaciers ice saturation seed stars xsize width ysize height' + ppmnorm 'bpercent bvalue wpercent wvalue' + ppmquant 'map:_files:-g:*.(#i)ppm' + ppmtoacad 'background aspect' + ppmtoicr 'windowname expand display' + ppmtomitsu 'sharpness:compadd:1:2:3:4 enlarge:compadd:1:2:3 media:compadd:A:A4:AS:A4S copy:compadd:1:2:3:4:5:6:7:8:9' + ppmtopj 'gamma xpos ypos back:compadd:dark:lite render:compadd:none:snap:bw:dither:diffuse:monodither:monodiffuse:clusterdither:monoclusterdither' + ppmtopjxl 'gamma xshift yshift xsize width xscale ysize height yscale' + ppmtouil 'name' + ppmtoxpm 'name' + pnmalias 'fgcolor:_colors bgcolor:_colors weight' + pnmcomp 'xoff yoff alpha:_files:-g:*.(#i)pgm' + pnmhistmap 'max' + pnmindex 'size across colors' + pnmmargin 'color:_colors' + pnmscale 'xsize width ysize height xscale yscale xysize' + pnmtoddif 'resolution' + pnmtofits 'min max' + pnmtops 'scale dpi width height' + pnmtosgi 'imagename' + pnmtotiff 'predictor rowsperstrip' + pnmtoxwd 'pseudodepth' + ) + + # Options without arguments. + + _pbm_options=( + pbmclean 'connect' + pbmmake 'white black gray' + pbmmask 'expand' + pbmreduce 'floyd fs threshold' + pbmtoepsi 'bbonly' + pgmenhance '1 2 3 4 5 6 7 8 9' + pgmramp 'lr tb rectangle ellipse' + pgmtopbm 'floyd fs threshold dither8 d8 cluster3 c3 cluster4 c4 cluster8 c8' + ppmbrighten 'n' + ppmdist 'intensity frequency' + ppmforge 'clouds night' + ppmpat 'gingham2 g2 gingham3 g3 madras tartan poles squig camo anticamo' + ppmquant 'floyd fs' + ppmqvga 'd q v' + ppmtoacad 'dxb poly white 8' + ppmtobmp 'os2 windows' + ppmtogif 'interlace' + ppmtoicr 'rle' + ppmtoilbm 'hamif' + ppmtomap 'sort square' + ppmtomitsu 'dpi300 tiny' + ppmtopj 'rle center' + ppmtopjxl 'nopack presentation dark diffuse cluster dither' + ppmtosixel 'raw margin' + ppmtotga 'mono cmap rgb norle' + pnmalias 'bonly fonly balias falias' + pnmarith 'add subtract multiply' + pnmcat 'white black leftright lr topbottom tb jtop jbottom jleft jright' + pnmcomp 'invert' + pnmcrop 'white black' + pnmflip 'leftright lr topbottom tb transpose xy rotate90 r90 ccw rotate270 r270 cw rotate180 r180' + pnmhistmap 'black white verbose' + pnmindex 'black' + pnmmargin 'white black' + pnmpad 'white black' + pnmpaste 'replace or and xor' + pnmrotate 'noantialias' + pnmshear 'noantialias' + pnmtops 'turn noturn rle runlength' + pnmtorast 'standard rle' + pnmtosgi 'verbatim rle' + pnmtotiff 'none packbits lzw g3 g4 2d fill msb2lsb lsb2msb' + pnmtoxwd 'directcolor' + ) +fi + +opts=( $=_pbm_arg_options[$words[1]] ) +if (( $#opts )); then + + # This Command has options with arguments. The options are already in + # `opts'. Now we see if we are after one of these options on the line. + + local after="$opts[(I)${words[CURRENT-1][2,-1]}(|:*)]" + + if (( after )); then + + # We are. If the string contains a colon, anything after it is a + # colon-separated list of words. We just execute this list of words + # as a command with its arguments. + + if [[ "$after" = *:* ]]; then + after="${${opts[after]#*:}//:/ }" + [[ -z "$after" ]] || $=after + fi + return + fi + + # Otherwise we just add the option names. + + compadd -J options - -${^=opts%%:*} +fi + +# And the names of the options without arguments. + +opts=( $=_pbm_options[$words[1]] ) +(( $#opts )) && compadd -J options - -${^=opts} + +# A small special case here: the first argument of `ppmmake' is a +# color. More of these could be added. + +if [[ "$words[1]" = ppmmake && CURRENT -eq 2 ]]; then + _colors + return +fi + +# Generate the filenames. if [[ "$words[1]" = pnm* ]]; then pat='*.(#i)p[bgp]m' @@ -10,4 +149,4 @@ pat="*.(#i)${words[1][1,3]}" fi -_path_files -g "$pat" || _files -g '*.(#i)p[bgp]m' +_path_files -J files -g "$pat" || _files -J files -g '*.(#i)p[bgp]m' diff -u -r oc/User/_x_options Completion/User/_x_options --- oc/User/_x_options Wed Aug 11 11:58:08 1999 +++ Completion/User/_x_options Wed Aug 11 13:10:21 1999 @@ -3,7 +3,7 @@ # A simple pattern completion, just as an example. if [ "$words[CURRENT-1]" = "-display" ]; then - _compskip='' + _compskip=all _hosts -S :0 else compadd -P- -J options - display name xrm -- Sven Wischnowsky wischnow@informatik.hu-berlin.de