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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688
|
#compdef zstyle
local state context ostate line expl ctop suf
local nm=$compstate[nmatches] taglist patterns contexts MATCH
integer MBEGIN MEND
typeset -A opt_args styles
# Assoc array of styles; the values give the possible top-level
# contexts:
# c completion
# d chpwd
# e line editor
# v vcs_info
# z zftp
# or any combination of the above,
# followed by a colon, followed by a state to enter, empty if none.
styles=(
accept-exact c:bool
accept-exact-dirs c:bool
add-space c:bool
ambiguous c:bool
assign-list c:_parameters
auto-description c:
avoid-completer c:completer
break-keys c:
cache-path c:_directories
cache-policy c:_functions
call-command c:bool
command c:command
command-path c:_dir_list
commands c:
complete c:bool
complete-options c:bool
completer c:completer
condition c:bool
cursor c:cursor
delimiters c:
disabled c:bool
domains c:
environ c:environ
expand c:
extra-verbose c:bool
fake c:
fake-always c:
fake-files c:fake-files
fake-parameters c:fake-params
file-list c:bool
file-patterns c:filepat
file-sort c:fsort
filter c:
force-list c:
format c:
glob c:bool
global c:bool
group-name c:
group-order c:tag
groups c:_groups
hidden c:bool
hosts c:_hosts
hosts-ports c:host-port
ignore-line c:ignline
ignore-parents c:ignorepar
ignored-patterns c:
insert-ids c:insert-ids
insert-sections c:insert-sections
insert-tab c:bool
insert-unambiguous c:insunambig
keep-prefix c:keep-prefix
last-prompt c:bool
list ce:listwhen
list-colors c:
list-dirs-first c:bool
list-grouped c:bool
list-packed c:bool
list-prompt c:
list-rows-first c:bool
list-separator c:separator
list-suffixes c:bool
local c:
mail-directory c:_directories
match-original c:match-orig
matcher c:
matcher-list c:
max-errors c:
max-matches-width c:max-matches-width
menu c:boolauto
muttrc c:_files
numbers c:bool
old-list c:bool
old-matches c:oldmatches
old-menu c:bool
original c:bool
packageset c:packageset
path c:_directories
pager c:_command_names
path-completion c:bool
pine-directory c:_directories
ports c:_ports
prefix-hidden c:bool
prefix-needed c:bool
preserve-prefix c:preserve-prefix
range c:
recent-dirs-insert c:recent-dirs-insert
recursive-files c:
regular c:bool
rehash c:bool
remote-access c:bool
remove-all-dups c:bool
select-prompt c:
select-scroll c:
separate-sections c:bool
show-ambiguity c:
show-completer c:bool
single-ignored c:single-ignored
sort c:sort-order
special-dirs c:sdirs
squeeze-slashes c:bool
stop c:stop
strip-comments c:bool
subst-globs-only c:bool
substitute c:bool
suffix c:bool
tag-order c:tag-order
try-to-use-pminst c:bool
urls c:_urls
use-cache c:bool
use-compctl c:urgh
use-ip c:bool
use-perl c:bool
users c:_users
users-hosts c:user-host
users-hosts-ports c:user-host-port
verbose ce:bool
word c:bool
recent-dirs-default d:bool
recent-dirs-file d:_files
recent-dirs-max d:
recent-dirs-prune d:
recent-dirs-pushd d:bool
auto-previous e:bool
break-keys e:
cursor e:
edit-buffer e:bool
edit-previous e:bool
editor e:
insert-kept e:
leave-cursor e:bool
match e:
prompt e:
stop-keys e:
toggle e:bool
url-globbers e:
url-local-schema e:
url-metas e:
url-other-schema e:
url-seps e:
whence e:
word-chars e:
word-class e:
word-style e:word-style
word-context e:
formats v:vcs-format
actionformats v:vcs-format
branchformat v:branch-format
nvcsformats v:
hgrevformat v:hgrev-format
stgitformat v:stg-format
patch-format v:patch-format
nopatch-format v:patch-format
max-exports v:
enable v:vcs
disable v:vcs
disable-patterns v:
check-for-changes v:bool
check-for-staged-changes
v:bool
stagedstr v:
unstagedstr v:
command v:_command_names
use-server v:bool
use-simple v:bool
get-revision v:bool
get-mq v:bool
get-bookmarks v:bool
get-unapplied v:bool
debug v:bool
hooks v:_vcs_info_hooks
use-prompt-escapes v:bool
use-quilt v:bool
quilt-standalone v:bool
quilt-patch-dir v:_directories
quiltcommand v:_command_names
chpwd z:bool
progress z:progress
remote-glob z:bool
titlebar z:bool
update z:
)
taglist=(
accounts all-expansions all-files arguments arrays association-keys
bookmarks builtins characters colormapids colors commands contexts
corrections cursors default descriptions devices directories
directory-stack displays expansions extensions files flags fstypes
fonts functions globbed-files groups history-words hosts indexes
interfaces jobs keymaps keysyms libraries limits local-directories
mailboxes manuals maps messages modifiers modules my-accounts
named-directories names newsgroups nicknames options original
other-accounts packages parameters path-directories paths pods ports
prefixes printers processes processes-names ps regex sequences
sessions signals strings styles tags targets timezones types urls
users values variant visuals warnings widgets windows zsh-options
email-address ${(k)functions[(I)_email-*]#_}
)
# Be careful with the context arguments here. They like to masquerade.
_arguments -C -A '-*' \
'(: -)-L[output in form of zstyle commands]:pattern for context patterns:->metapatterns:style:->metastyles' \
'(: -)-d[delete style definitions]:verbatim context pattern:->patterns:*:styles:->pstyles' \
'(: -)-e[value is evaluated when style is looked up]:context pattern:->contexts:style:->styles:*:command:_cmdstring' \
'(: -)-g[retrieve style definition]:array parameter:_parameters -g "*array*":verbatim context pattern:->patterns:styles:->pstyles' \
'(: -)-s[retrieve style value as string]:context name:->contexts:style:->styles:scalar parameter:_parameters -g "*scalar*":separator: ' \
'(: -)-b[retrieve style value as boolean]:context name:->contexts:style:->styles:scalar parameter:_parameters -g "*scalar*"' \
'(: -)-a[retrieve style value as array]:context name:->contexts:style:->styles:array parameter:_parameters -g "*array*"' \
'(: -)-t[test a style, returning false if it'\''s undefined]:context name:->contexts:style:->styles:*:strings to test presence of: ' \
'(: -)-T[test a style, returning true if it'\''s undefined]:context name:->contexts:style:->styles:*:strings to test presence of: ' \
'(: -)-m[pattern-match values of a style]:context name:->contexts:style:->styles:pattern: ' \
':context pattern:->contexts' ':style:->styles' '*:argument:->style-arg'
while (( $#state )); do
case "$state[1]" in
# 'contexts' completes either full context names (for -t/-s/-a), or context
# patterns (for 'zstyle :foo bar' and -e).
(contexts)
if [[ ! -prefix :*: ]]; then
_wanted contexts expl "$state_descr" compadd -P : -qS : chpwd completion vcs_info zftp zle
elif compset -P :completion:; then
contexts=( functions _completers cmdorcont argument tag )
elif compset -P :vcs_info:; then
contexts=( vcs-string user-context repo-root-name )
elif compset -P :zle:; then
_wanted widgets expl widget _widgets -qS :
fi
if (( $#contexts )); then
for ostate in $contexts; do
compset -P '[^:]#:' || break
done
suf=()
compset -S ':*' || suf=( -qS: )
[[ $ostate = $contexts[-1] ]] && suf=()
if compset -P '(|\\)\((*\||)'; then # handle (x|y) patterns
suf=()
compset -S '(|\\)[)|]*' ||
suf=( -S "${${QIPREFIX:+|}:-\|}" -r "${${QIPREFIX:+|}:-\\\\} \t)" )
fi
state+=( "$ostate" )
fi
;;
# 'patterns' completes context patterns that are set, for -d/-g.
(patterns)
zstyle -g patterns
_wanted contexts expl "$state_descr" compadd -a patterns
;;
# 'metapatterns': patterns that are matched not against contexts, but
# against patterns.
(metapatterns)
zstyle -g patterns
patterns=( "${(@b)patterns}" )
_wanted contexts expl "$state_descr" compadd -a patterns
;;
# 'metastyles': styles that are set on context patterns matching the given
# metapattern.
(metastyles)
# Anonymous function to shadow the global $styles assoc
() {
local metapattern=${(Q)${${opt_args[-L]%:*}//(#m)\\([\\:])/${MATCH[2]}}}
local -a metastyles styles
local pattern
zstyle -g patterns
for pattern in "${(@M)patterns:#${~metapattern}}"; do
zstyle -g styles $pattern
metastyles+=( "${styles[@]}" )
done
_wanted styles expl "$state_descr" compadd -a metastyles
unset pattern
unset metastyles
}
;;
# 'pstyles': complete styles that are set for the verbatim context pattern
# specified on the command line. (If the user has set no zstyles, this
# will complete nothing.)
(pstyles)
local -a pstyles
local pattern
if (( $+opt_args[-d] )); then
pattern=${opt_args[-d]}
pattern=${pattern%":${(b)PREFIX}"} # remove style
pattern=${pattern//(#m)\\([\\:])/${MATCH[2]}} # undo _arguments escaping
pattern=${(Q)pattern} # undo command-line escaping (assumes no noglob)
zstyle -g pstyles $pattern
elif (( $+opt_args[-g] )); then
pattern=${opt_args[-g]}
pattern=${pattern%":${(b)PREFIX}"} # remove style
pattern=${pattern#*:} # remove array name
pattern=${pattern//(#m)\\([\\:])/${MATCH[2]}} # undo _arguments escaping
pattern=${(Q)pattern} # undo command-line escaping (assumes no noglob)
zstyle -g pstyles $pattern
fi
_wanted styles expl style compadd -a pstyles
unset pattern
unset pstyles
;;
# 'styles': complete all styles that may be set in the context given on the
# command line. This is independent of what styles are set.
(styles)
# Get the top-level context we're completing for, if any.
if [[ -n $line[1] ]]; then
# zstyle :something <TAB>
local the_context=$line[1]
else
# zstyle -x :something <TAB>
local joined_value=${(v)opt_args[(i)(-e|-s|-b|-a|-t|-T|-m)]}
local the_context=${(Q)joined_value[0, ${joined_value[(i)[^\\]:]}-2 ]}
fi
# Note: for 'zstyle :something <TAB>' and for 'zstyle -e :something <TAB>',
# $the_context is a context pattern; for -s,-b,-a,-t,-T,-m, it is a context
# name. We currently draw no distinction between these two cases.
case $the_context in
(:completion:*)
ctop=c
;;
(:chwpd:*)
ctop=d
;;
(:zftp:*)
ctop=z
;;
(:vcs_info:*)
ctop=v
;;
(:zle:*)
ctop=e
;;
(*)
ctop=a-z
;;
esac
_wanted styles expl style \
compadd -M 'r:|-=* r:|=*' -k "styles[(R)[^:]#[$ctop][^:]#:*]"
;;
(style-arg)
state+=( "${styles[${(Q)line[2]}]#*:}" )
;;
(argument)
_message -e arguments argument
;;
(bool)
_wanted values expl boolean compadd true false
;;
(boolauto)
_wanted values expl boolean \
compadd true false auto select search search-backward interactive
;;
(cmdorcont)
_alternative -O suf \
'commands:command:_path_commands' \
'contexts:context:(-array-value- -brace-parameter- -command- -condition- -math- -parameter- -redirect- -subscript- -value-)'
;;
(cursor)
_wanted values expl 'cursor positioning' compadd complete key default
;;
(completer)
_wanted values expl completer _completers -p
;;
(environ)
if [[ "$PREFIX" = *\=* ]]; then
compstate[parameter]="${PREFIX%%\=*}"
compset -P 1 '*='
_value
else
suf=()
compset -S '=*' || suf=(-S '=')
_parameters -q $suf
fi
;;
(fsort)
_wanted values expl 'how to sort files' \
compadd name size links time date modification access inode change reverse
;;
(function)
_wanted control-functions expl 'control function' \
compadd predict-on all-matches
;;
(functions)
_wanted comp-widgets expl 'completion widget' \
compadd $suf -M 'r:|-=* r:|=*' - all-matches complete-debug complete-tag \
correct-word expand-word expand-alias-word history-words \
${${${(M)${(f)"$(_call_program comp-widgets zle -l)"}:#*-C*}:#_*}/ -C*}
;;
(user-host-port)
if [[ $PREFIX != *[@:]* ]]; then
_users -S @
elif [[ $PREFIX = *[@:]*[[@:]* ]]; then
compset -P 2 '*[:@]'
_ports
else
compset -P 1 '*[:@]'
_hosts -S :
fi
;;
(host-port)
if [[ $PREFIX != *:* ]]; then
_hosts -S :
else
compset -P 1 '*:'
_ports
fi
;;
(listwhen)
_wanted values expl 'when to list completions' \
compadd always never sometimes
;;
(packageset)
_wanted values expl 'default package set' \
compadd available installed uninstalled
;;
(progress)
_wanted values expl 'progress meter style' \
compadd none bar percent
;;
(sdirs)
_wanted values expl 'whether to complete . or ..' \
compadd true false ..
;;
(stop)
_wanted values expl 'when to insert matches' \
compadd true false verbose
;;
(tag)
_wanted tags expl tag compadd $suf -a taglist
;;
(tag-order)
if compset -P '*:*:'; then
_message -e descriptions description
elif compset -P '*:'; then
_message -e labels 'tag label'
else
suf=()
compset -S ':*' || suf=( -qS: )
_wanted values expl tag compadd $suf -a taglist
fi
;;
(filepat)
if compset -P '*:*:'; then
_message -e descriptions description
elif compset -P '*:'; then
_message -e tags tag
else
_message -e patterns 'glob pattern'
fi
;;
(user-host)
if [[ $PREFIX = *[@:]* ]]; then
compset -P '*[@:]'
_hosts
else
_users -S @
fi
;;
(ignorepar)
_wanted values expl 'which parents to ignore' \
compadd parent pwd .. directory
;;
(single-ignored)
_wanted values expl 'how to handle a single ignored match' \
compadd - show menu
;;
(command)
shift 3 words
(( CURRENT -= 3 ))
_normal
;;
(insert-ids)
_wanted values expl 'when to insert process IDs' \
compadd - menu single longer
;;
(insert-sections)
_wanted values expl 'where to insert man page section' \
compadd - true false prepend suffix
;;
(fake-files)
_message -e fakes 'prefix and names'
;;
(fake-params)
if compset -P '*:'; then
_wanted values expl 'parameter type' compadd scalar array integer
else
suf=''
compset -S ':*' || suf='-qS:'
_wanted values expl 'fake parameter' _parameters $suf
fi
;;
(ignline)
_wanted values expl 'ignore strings on the line' compadd true false current current-shown other
;;
(keep-prefix)
_wanted values expl 'keep prefix' compadd true false changed
;;
(match-orig)
_wanted values expl "match without inserting \`*'" compadd only both
;;
(oldmatches)
_wanted values expl 'use list of old matches' compadd true false only
;;
(insunambig)
_wanted values expl 'insert unambiguous string' compadd true false pattern
;;
(preserve-prefix)
_message -e prefixes 'pattern matching prefix to keep'
;;
(recent-dirs-insert)
_wanted values expl 'inserting recent directories' \
compadd true false always fallback both
;;
(separator)
_message -e separators 'separator string'
;;
(sort-order)
_wanted sort-orders expl 'sort order' compadd -F line - true false match nosort numeric reverse
;;
(max-matches-width)
_message -e numbers 'maximum display width for matches'
;;
(urgh)
_wanted values expl no compadd no false off 0
;;
(word-style)
_wanted word-styles expl 'word style' compadd {normal,specified,unspecified,shell,whitespace}-subword
;;
(vcs-string)
_wanted vcs expl vcs compadd $suf - \
${${(f)"$(_call_program vcs vcs_info_printsys 2>/dev/null)"}:#\#*}
;;
(vcs)
_wanted vcs expl vcs compadd \
${${(f)"$(_call_program vcs vcs_info_printsys 2>/dev/null)"}:#(\#|*-)*}
;;
(user-context)
_wanted user-contexts expl 'user context' compadd $suf default command
;;
(repo-root-name)
_message -e names 'repository root name'
;;
(vcs-format)
if [[ $PREFIX = *% ]]; then
compset -P '*%'
_values -s '' 'format replacement' \
's[the vcs in use]' \
'b[the current branch]' \
'a[an identifier describing the action]' \
'i[current revision no/id]' \
'c[details of staged changes]' \
'u[details of unstaged changes]' \
'r[repository name]' \
'S[subdirectory within repository]' \
'm[misc replacement - backend specific]'
else
_message -e formats 'vcs format'
fi
;;
(branch-format)
if [[ $PREFIX = *% ]]; then
compset -P '*%'
_values -s '' 'format replacement' \
'b[the current branch]' \
'r[current revision number]'
else
_message -e formats 'vcs format'
fi
;;
(hgrev-format)
if [[ $PREFIX = *% ]]; then
compset -P '*%'
_values -s '' 'format replacement' \
'h[current revision hash (global)]' \
'r[current revision number (local)]'
else
_message -e formats 'vcs format'
fi
;;
(stg-format)
if [[ $PREFIX = *% ]]; then
compset -P '*%'
_values -s '' 'format replacement' \
'p[patch currently on top of the stack]' \
'c[the number of unapplied patches]'
else
_message -e formats 'vcs format'
fi
;;
(patch-format)
if [[ $PREFIX = *% ]]; then
compset -P '*%'
_values -s '' 'format replacement' \
'p[name of top-most patch (applied-string)]' \
'u[number of unapplied patches (unapplied-string)]' \
'n[number of applied patches]' \
'c[number of unapplied patches]' \
'a[number of all patches]' \
'g[names of active mq guards (hg backend)]' \
'G[number of active mq guards (hg backend)]'
else
_message -e formats 'vcs format'
fi
;;
(_*)
${=state[1]} $suf
;;
esac
shift state
done
[[ $compstate[nmatches] != $nm ]]
|