comparison contrib/zsh_completion @ 3491:459e7cd943d4

zsh: complete according to the -R option if specified
author Brendan Cully <brendan@kublai.com>
date Tue, 24 Oct 2006 13:09:09 -0700
parents 72b9a3b8bb1d
children 776c317566b6
comparison
equal deleted inserted replaced
3490:72b9a3b8bb1d 3491:459e7cd943d4
13 # 13 #
14 14
15 local curcontext="$curcontext" state line 15 local curcontext="$curcontext" state line
16 typeset -A opt_args 16 typeset -A opt_args
17 local subcmds repos newFiles addedFiles includeExclude commitMessage 17 local subcmds repos newFiles addedFiles includeExclude commitMessage
18 local _hg_state 18 local ridx _hgroot
19 19
20 # FIXME: why isn't opt_args available?
21 [[ -d .hg ]] && _hgroot="$PWD"
22 ridx=$words[(i)-R]
23 (( $ridx < $#words )) && _hgroot="${words[$ridx+1]}"
24
25 # hg dispatch (borrowed from _cvs)
26 (( $+functions[_hg_cmd] )) ||
27 _hg_cmd () {
28 _call_program hg hg -R "$_hgroot" "$@"
29 }
30
31 (( $+functions[_hg_state] )) ||
20 _hg_state () { 32 _hg_state () {
21 case "$state" in 33 case "$state" in
22 (tags) 34 (tags)
23 compadd $(hg tags 2> /dev/null | 35 compadd $(_hg_cmd tags 2> /dev/null |
24 sed -e 's/[0-9]*:[a-f0-9]*$//; s/ *$//') 36 sed -e 's/[0-9]*:[a-f0-9]*$//; s/ *$//')
25 ;; 37 ;;
26 (qapplied) 38 (qapplied)
27 compadd $(hg qapplied) 39 compadd $(_hg_cmd qapplied)
28 ;; 40 ;;
29 (qunapplied) 41 (qunapplied)
30 compadd $(hg qunapplied) 42 compadd $(_hg_cmd qunapplied)
31 ;; 43 ;;
32 esac 44 esac
33 } 45 }
34 46
35 subcmds=($(hg -v help | sed -e '1,/^list of commands:/d' \ 47 subcmds=($(hg -v help | sed -e '1,/^list of commands:/d' \
36 -e '/^global options:/,$d' -e '/^ [^ ]/!d; s/[,:].*//g;')) 48 -e '/^global options:/,$d' -e '/^ [^ ]/!d; s/[,:].*//g;'))
37 49
38 # A lot of commands have these arguments 50 # A lot of commands have these arguments
39 includeExclude=( 51 includeExclude=(
40 '*-I-[include names matching the given patterns]:dir:_files -W $(hg root) -/' 52 '*-I-[include names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/'
41 '*--include-[include names matching the given patterns]:dir:_files -W $(hg root) -/' 53 '*--include-[include names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/'
42 '*-X-[exclude names matching the given patterns]:dir:_files -W $(hg root) -/' 54 '*-X-[exclude names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/'
43 '*--exclude-[exclude names matching the given patterns]:dir:_files -W $(hg root) -/') 55 '*--exclude-[exclude names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/')
44 56
45 styleOpts=( 57 styleOpts=(
46 '--style[display using template map file]:' 58 '--style[display using template map file]:'
47 '--template[display with template]:') 59 '--template[display with template]:')
48 60
83 curcontext="${curcontext%:*}=$service:" 95 curcontext="${curcontext%:*}=$service:"
84 fi 96 fi
85 97
86 case $service in 98 case $service in
87 (add) 99 (add)
88 newFiles=(${(ps:\0:)"$(hg status -0un .)"}) 100 newFiles=(${(ps:\0:)"$(_hg_cmd status -0un .)"})
89 _arguments $includeExclude \ 101 _arguments $includeExclude \
90 '*:file:->unknown' 102 '*:file:->unknown'
91 _wanted files expl 'unknown files' compadd -a newFiles 103 _wanted files expl 'unknown files' compadd -a newFiles
92 ;; 104 ;;
93 105
95 _arguments $includeExclude \ 107 _arguments $includeExclude \
96 '*:directories:_files -/' # assume they want to add/remove a dir 108 '*:directories:_files -/' # assume they want to add/remove a dir
97 ;; 109 ;;
98 110
99 (forget) 111 (forget)
100 addedFiles=(${(ps:\0:)"$(hg status -0an .)"}) 112 addedFiles=(${(ps:\0:)"$(_hg_cmd status -0an .)"})
101 _arguments $includeExclude \ 113 _arguments $includeExclude \
102 '*:file:->added' 114 '*:file:->added'
103 _wanted files expl 'newly added files' compadd -a addedFiles 115 _wanted files expl 'newly added files' compadd -a addedFiles
104 ;; 116 ;;
105 117
159 '(-u)--unknown[show only unknown files]' \ 171 '(-u)--unknown[show only unknown files]' \
160 '*:search pattern, then files:_files' 172 '*:search pattern, then files:_files'
161 ;; 173 ;;
162 174
163 (revert) 175 (revert)
164 addedFiles=(${(ps:\0:)"$(hg status -0amrn .)"}) 176 addedFiles=(${(ps:\0:)"$(_hg_cmd status -0amrn .)"})
165 _arguments \ 177 _arguments \
166 '(--rev)-r[revision to revert to]:revision:->tags' \ 178 '(--rev)-r[revision to revert to]:revision:->tags' \
167 '(-r)--rev[revision to revert to]:revision:->tags' \ 179 '(-r)--rev[revision to revert to]:revision:->tags' \
168 '(--nonrecursive)-n[do not recurse into subdirectories]' \ 180 '(--nonrecursive)-n[do not recurse into subdirectories]' \
169 '(-n)--nonrecursive[do not recurse into subdirectories]' \ 181 '(-n)--nonrecursive[do not recurse into subdirectories]' \
170 '*:file:->modified' 182 '*:file:->modified'
171 _wanted files expl 'mofified files' compadd -a addedFiles 183 _wanted files expl 'mofified files' compadd -a addedFiles
172 ;; 184 ;;
173 185
174 (commit|ci) 186 (commit|ci)
175 addedFiles=(${(ps:\0:)"$(hg status -0amrn .)"}) 187 addedFiles=(${(ps:\0:)"$(_hg_cmd status -0amrn .)"})
176 _arguments $includeExclude \ 188 _arguments $includeExclude \
177 '(--addremove)-A[run addremove during commit]' \ 189 '(--addremove)-A[run addremove during commit]' \
178 '(-A)--addremove[run addremove during commit]' \ 190 '(-A)--addremove[run addremove during commit]' \
179 '(--message)-m[use <txt> as commit message]:string:' \ 191 '(--message)-m[use <txt> as commit message]:string:' \
180 '(-m)--message[use <txt> as commit message]:string:' \ 192 '(-m)--message[use <txt> as commit message]:string:' \
282 '*:name, then revision:->tags' 294 '*:name, then revision:->tags'
283 ;; 295 ;;
284 296
285 (clone) 297 (clone)
286 if (( CURRENT == 2 )); then 298 if (( CURRENT == 2 )); then
287 repos=( $(hg paths | sed -e 's/^.*= //') ) 299 repos=( $(_hg_cmd paths | sed -e 's/^.*= //') )
288 _arguments \ 300 _arguments \
289 '(--no-update)-U[do not update the new working directory]' \ 301 '(--no-update)-U[do not update the new working directory]' \
290 '(-U)--no-update[do not update the new working directory]' \ 302 '(-U)--no-update[do not update the new working directory]' \
291 '(--ssh)-e[specify ssh command to use]:string:' \ 303 '(--ssh)-e[specify ssh command to use]:string:' \
292 '(-e)--ssh[specify ssh command to use]:string:' \ 304 '(-e)--ssh[specify ssh command to use]:string:' \
343 _arguments \ 355 _arguments \
344 '(--strip)-p[directory strip option for patch (default: 1)]:count:' \ 356 '(--strip)-p[directory strip option for patch (default: 1)]:count:' \
345 '(-p)--strip[directory strip option for patch (default: 1)]:count:' \ 357 '(-p)--strip[directory strip option for patch (default: 1)]:count:' \
346 '(--force)-f[skip check for outstanding uncommitted changes]' \ 358 '(--force)-f[skip check for outstanding uncommitted changes]' \
347 '(-f)--force[skip check for outstanding uncommitted changes]' \ 359 '(-f)--force[skip check for outstanding uncommitted changes]' \
348 '(--base)-b[base directory to read patches from]:file:_files -W $(hg root) -/' \ 360 '(--base)-b[base directory to read patches from]:file:_files -W $(_hg_cmd root) -/' \
349 '(-b)--base[base directory to read patches from]:file:_files -W $(hg root) -/' \ 361 '(-b)--base[base directory to read patches from]:file:_files -W $(_hg_cmd root) -/' \
350 '*:patch file:_files' 362 '*:patch file:_files'
351 ;; 363 ;;
352 364
353 (pull) 365 (pull)
354 repos=( $(hg paths | sed -e 's/^.*= //') ) 366 repos=( $(_hg_cmd paths | sed -e 's/^.*= //') )
355 _arguments \ 367 _arguments \
356 '(--update)-u[update working directory to tip after pull]' \ 368 '(--update)-u[update working directory to tip after pull]' \
357 '(-u)--update[update working directory to tip after pull]' \ 369 '(-u)--update[update working directory to tip after pull]' \
358 '(--ssh)-e[specify ssh command to use]:ssh command:' \ 370 '(--ssh)-e[specify ssh command to use]:ssh command:' \
359 '(-e)--ssh[specify ssh command to use]:ssh command:' \ 371 '(-e)--ssh[specify ssh command to use]:ssh command:' \
383 '*:revision:->revs' 395 '*:revision:->revs'
384 _wanted revs expl 'revision or tag' compadd -a tags 396 _wanted revs expl 'revision or tag' compadd -a tags
385 ;; 397 ;;
386 398
387 (push) 399 (push)
388 repos=( $(hg paths | sed -e 's/^.*= //') ) 400 repos=( $(_hg_cmd paths | sed -e 's/^.*= //') )
389 _arguments \ 401 _arguments \
390 '(--force)-f[force push]' \ 402 '(--force)-f[force push]' \
391 '(-f)--force[force push]' \ 403 '(-f)--force[force push]' \
392 '(--ssh)-e[specify ssh command to use]:ssh command:' \ 404 '(--ssh)-e[specify ssh command to use]:ssh command:' \
393 '(-e)--ssh[specify ssh command to use]:ssh command:' \ 405 '(-e)--ssh[specify ssh command to use]:ssh command:' \
470 {-f,--force}'[import uncommitted changes into patch]' \ 482 {-f,--force}'[import uncommitted changes into patch]' \
471 ':patch name:' 483 ':patch name:'
472 ;; 484 ;;
473 485
474 (qpo*) 486 (qpo*)
475 applied=( $(hg qapplied) )
476 _arguments \ 487 _arguments \
477 (1){-a,--all}'[pop all patches]' \ 488 (1){-a,--all}'[pop all patches]' \
478 {-f,--force}'[forget any local changes]' \ 489 {-f,--force}'[forget any local changes]' \
479 ':applied patch:->qapplied' 490 ':applied patch:->qapplied'
480 ;; 491 ;;