mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-10 00:31:07 +02:00
zsh-workers/7420
This commit is contained in:
parent
98aaef0a46
commit
d00f73c367
9 changed files with 203 additions and 21 deletions
|
@ -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++ ))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
@ -80,4 +80,6 @@ _lastcomp[isuffix]="$ISUFFIX"
|
|||
_lastcomp[qiprefix]="$QIPREFIX"
|
||||
_lastcomp[qisuffix]="$QISUFFIX"
|
||||
|
||||
unset _compskip
|
||||
|
||||
return ret
|
||||
|
|
|
@ -29,17 +29,19 @@ fi
|
|||
|
||||
# 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 @@ fi
|
|||
# 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
|
||||
|
|
24
Completion/User/_colors
Normal file
24
Completion/User/_colors
Normal file
|
@ -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[@]"
|
|
@ -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 @@ else
|
|||
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'
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -334,8 +334,12 @@ for completing the name of a parameter expansion within braces
|
|||
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 @@ the tt(words) array, decrements the tt(CURRENT) parameter, then calls this
|
|||
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.
|
||||
)
|
||||
|
|
|
@ -5338,6 +5338,10 @@ makecomplistcall(Compctl cc)
|
|||
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;
|
||||
|
|
Loading…
Reference in a new issue