comparison .zfun/_hg @ 229:e5a40e768cf8

zfun: import newer _hg for improved hg completions
author Augie Fackler <durin42@gmail.com>
date Sat, 09 Oct 2010 15:21:50 -0500
parents 0ba810271408
children c451e42b3ecc
comparison
equal deleted inserted replaced
228:0c8939baa35c 229:e5a40e768cf8
2 2
3 # Zsh completion script for mercurial. Rename this file to _hg and copy 3 # Zsh completion script for mercurial. Rename this file to _hg and copy
4 # it into your zsh function path (/usr/share/zsh/site-functions for 4 # it into your zsh function path (/usr/share/zsh/site-functions for
5 # instance) 5 # instance)
6 # 6 #
7 # Copyright (C) 2005-6 Steve Borho 7 # If you do not want to install it globally, you can copy it somewhere
8 # Copyright (C) 2006-8 Brendan Cully <brendan@kublai.com> 8 # else and add that directory to $fpath. This must be done before
9 # compinit is called. If the file is copied to ~/.zsh.d, your ~/.zshrc
10 # file could look like this:
9 # 11 #
10 # This is free software; you can redistribute it and/or modify it under 12 # fpath=("$HOME/.zsh.d" $fpath)
11 # the terms of the GNU General Public License as published by the Free 13 # autoload -U compinit
12 # Software Foundation; either version 2 of the License, or (at your 14 # compinit
13 # option) any later version. 15 #
16 # Copyright (C) 2005, 2006 Steve Borho <steve@borho.org>
17 # Copyright (C) 2006-10 Brendan Cully <brendan@kublai.com>
18 #
19 # Permission is hereby granted, without written agreement and without
20 # licence or royalty fees, to use, copy, modify, and distribute this
21 # software and to distribute modified versions of this software for any
22 # purpose, provided that the above copyright notice and the following
23 # two paragraphs appear in all copies of this software.
24 #
25 # In no event shall the authors be liable to any party for direct,
26 # indirect, special, incidental, or consequential damages arising out of
27 # the use of this software and its documentation, even if the authors
28 # have been advised of the possibility of such damage.
29 #
30 # The authors specifically disclaim any warranties, including, but not
31 # limited to, the implied warranties of merchantability and fitness for
32 # a particular purpose. The software provided hereunder is on an "as
33 # is" basis, and the authors have no obligation to provide maintenance,
34 # support, updates, enhancements, or modifications.
14 35
15 emulate -LR zsh 36 emulate -LR zsh
16 setopt extendedglob 37 setopt extendedglob
17 38
18 local curcontext="$curcontext" state line 39 local curcontext="$curcontext" state line
116 _hg_get_commands() { 137 _hg_get_commands() {
117 typeset -ga _hg_cmd_list 138 typeset -ga _hg_cmd_list
118 typeset -gA _hg_alias_list 139 typeset -gA _hg_alias_list
119 local hline cmd cmdalias 140 local hline cmd cmdalias
120 141
121 _call_program hg hg debugcomplete -v 2>/dev/null | while read -A hline 142 _call_program hg hg debugcomplete -v | while read -A hline
122 do 143 do
123 cmd=$hline[1] 144 cmd=$hline[1]
124 _hg_cmd_list+=($cmd) 145 _hg_cmd_list+=($cmd)
125 146
126 for cmdalias in $hline[2,-1] 147 for cmdalias in $hline[2,-1]
143 164
144 _hg_tags() { 165 _hg_tags() {
145 typeset -a tags 166 typeset -a tags
146 local tag rev 167 local tag rev
147 168
148 _hg_cmd tags 2> /dev/null | while read tag 169 _hg_cmd tags | while read tag
149 do 170 do
150 tags+=(${tag/ # [0-9]#:*}) 171 tags+=(${tag/ # [0-9]#:*})
151 done 172 done
152 (( $#tags )) && _describe -t tags 'tags' tags 173 (( $#tags )) && _describe -t tags 'tags' tags
153 } 174 }
154 175
155 _hg_branches() { 176 # likely merge candidates
156 typeset -a branches 177 _hg_mergerevs() {
157 local branch 178 typeset -a heads
158 179 local myrev
159 _hg_cmd branches -a 2> /dev/null | while read branch 180
160 do 181 heads=(${(f)"$(_hg_cmd heads --template '{rev}\\n')"})
161 branches+=(${branch/ # [0-9]#:*}) 182 # exclude own revision
162 done 183 myrev=$(_hg_cmd log -r . --template '{rev}\\n')
163 (( $#branches )) && _describe -t branches 'branches' branches 184 heads=(${heads:#$myrev})
164 } 185
165 186 (( $#heads )) && _describe -t heads 'heads' heads
166 _hg_branchtags() {
167 typeset -a branchtags
168 local branch tag
169
170 _hg_cmd tags 2> /dev/null | while read tag
171 do
172 branchtags+=(${tag/ # [0-9]#:*})
173 done
174
175 _hg_cmd branches -a 2> /dev/null | while read branch
176 do
177 branchtags+=(${branch/ # [0-9]#:*})
178 done
179 (( $#branchtags )) && _describe -t branchtags 'branchtags' branchtags
180 } 187 }
181 188
182 _hg_files() { 189 _hg_files() {
183 if [[ -n "$_hg_root" ]] 190 if [[ -n "$_hg_root" ]]
184 then 191 then
196 fi 203 fi
197 } 204 }
198 205
199 _hg_status() { 206 _hg_status() {
200 [[ -d $PREFIX ]] || PREFIX=$PREFIX:h 207 [[ -d $PREFIX ]] || PREFIX=$PREFIX:h
201 status_files=(${(ps:\0:)"$(_hg_cmd status -0n$1 ./$PREFIX 2>/dev/null)"}) 208 status_files=(${(ps:\0:)"$(_hg_cmd status -0n$1 ./$PREFIX)"})
202 } 209 }
203 210
204 _hg_unknown() { 211 _hg_unknown() {
205 typeset -a status_files 212 typeset -a status_files
206 _hg_status u 213 _hg_status u
218 _hg_status m 225 _hg_status m
219 _wanted files expl 'modified files' _multi_parts / status_files 226 _wanted files expl 'modified files' _multi_parts / status_files
220 } 227 }
221 228
222 _hg_resolve() { 229 _hg_resolve() {
223 local rstate rpah 230 local rstate rpath
224 231
225 [[ -d $PREFIX ]] || PREFIX=$PREFIX:h 232 [[ -d $PREFIX ]] || PREFIX=$PREFIX:h
226 233
227 _hg_cmd resolve -l ./$PREFIX 2> /dev/null | while read rstate rpath 234 _hg_cmd resolve -l ./$PREFIX | while read rstate rpath
228 do 235 do
229 [[ $rstate == 'R' ]] && resolved_files+=($rpath) 236 [[ $rstate == 'R' ]] && resolved_files+=($rpath)
230 [[ $rstate == 'U' ]] && unresolved_files+=($rpath) 237 [[ $rstate == 'U' ]] && unresolved_files+=($rpath)
231 done 238 done
232 } 239 }
266 local cacheid="hg:${host}-${rempath//\//_}" 273 local cacheid="hg:${host}-${rempath//\//_}"
267 cacheid=${cacheid%[-_]} 274 cacheid=${cacheid%[-_]}
268 compset -P '*/' 275 compset -P '*/'
269 if _cache_invalid "$cacheid" || ! _retrieve_cache "$cacheid" 276 if _cache_invalid "$cacheid" || ! _retrieve_cache "$cacheid"
270 then 277 then
271 remdirs=(${${(M)${(f)"$(_call_program files ssh -a -x $host ls -1FL "${(q)rempath}" 2> /dev/null)"}##*/}%/}) 278 remdirs=(${${(M)${(f)"$(_call_program files ssh -a -x $host ls -1FL "${(q)rempath}")"}##*/}%/})
272 _store_cache "$cacheid" remdirs 279 _store_cache "$cacheid" remdirs
273 fi 280 fi
274 _describe -t directories 'remote directory' remdirs -S/ 281 _describe -t directories 'remote directory' remdirs -S/
275 else 282 else
276 _message 'remote directory' 283 _message 'remote directory'
304 fi 311 fi
305 } 312 }
306 313
307 _hg_paths() { 314 _hg_paths() {
308 typeset -a paths pnames 315 typeset -a paths pnames
309 _hg_cmd paths 2> /dev/null | while read -A pnames 316 _hg_cmd paths | while read -A pnames
310 do 317 do
311 paths+=($pnames[1]) 318 paths+=($pnames[1])
312 done 319 done
313 (( $#paths )) && _describe -t path-aliases 'repository alias' paths 320 (( $#paths )) && _describe -t path-aliases 'repository alias' paths
314 } 321 }
349 '*'{-X+,--exclude}'[exclude names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/') 356 '*'{-X+,--exclude}'[exclude names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/')
350 357
351 _hg_diff_opts=( 358 _hg_diff_opts=(
352 '(--text -a)'{-a,--text}'[treat all files as text]' 359 '(--text -a)'{-a,--text}'[treat all files as text]'
353 '(--git -g)'{-g,--git}'[use git extended diff format]' 360 '(--git -g)'{-g,--git}'[use git extended diff format]'
354 "--nodates[don't include dates in diff headers]") 361 "--nodates[omit dates from diff headers]")
355 362
356 _hg_dryrun_opts=( 363 _hg_dryrun_opts=(
357 '(--dry-run -n)'{-n,--dry-run}'[do not perform actions, just print output]') 364 '(--dry-run -n)'{-n,--dry-run}'[do not perform actions, just print output]')
358 365
359 _hg_style_opts=( 366 _hg_style_opts=(
368 _hg_remote_opts=( 375 _hg_remote_opts=(
369 '(--ssh -e)'{-e+,--ssh}'[specify ssh command to use]:' 376 '(--ssh -e)'{-e+,--ssh}'[specify ssh command to use]:'
370 '--remotecmd[specify hg command to run on the remote side]:') 377 '--remotecmd[specify hg command to run on the remote side]:')
371 378
372 _hg_cmd() { 379 _hg_cmd() {
373 _call_program hg hg "$_hg_cmd_globals[@]" "$@" 380 _call_program hg HGPLAIN=1 hg "$_hg_cmd_globals[@]" "$@" 2> /dev/null
374 } 381 }
375 382
376 _hg_cmd_add() { 383 _hg_cmd_add() {
377 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ 384 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \
378 '*:unknown files:_hg_unknown' 385 '*:unknown files:_hg_unknown'
412 '--parent[parent to choose when backing out merge]' \ 419 '--parent[parent to choose when backing out merge]' \
413 '(--user -u)'{-u+,--user}'[record user as commiter]:user:' \ 420 '(--user -u)'{-u+,--user}'[record user as commiter]:user:' \
414 '(--rev -r)'{-r+,--rev}'[revision]:revision:_hg_tags' \ 421 '(--rev -r)'{-r+,--rev}'[revision]:revision:_hg_tags' \
415 '(--message -m)'{-m+,--message}'[use <text> as commit message]:text:' \ 422 '(--message -m)'{-m+,--message}'[use <text> as commit message]:text:' \
416 '(--logfile -l)'{-l+,--logfile}'[read commit message from <file>]:log file:_files -g \*.txt' 423 '(--logfile -l)'{-l+,--logfile}'[read commit message from <file>]:log file:_files -g \*.txt'
424 }
425
426 _hg_cmd_bisect() {
427 _arguments -s -w : $_hg_global_opts \
428 '(-)'{-r,--reset}'[reset bisect state]' \
429 '(--good -g --bad -b --skip -s --reset -r)'{-g,--good}'[mark changeset good]'::revision:_hg_tags \
430 '(--good -g --bad -b --skip -s --reset -r)'{-b,--bad}'[mark changeset bad]'::revision:_hg_tags \
431 '(--good -g --bad -b --skip -s --reset -r)'{-s,--skip}'[skip testing changeset]' \
432 '(--command -c --noupdate -U)'{-c+,--command}'[use command to check changeset state]':commands:_command_names \
433 '(--command -c --noupdate -U)'{-U,--noupdate}'[do not update to target]'
434 }
435
436 _hg_cmd_branch() {
437 _arguments -s -w : $_hg_global_opts \
438 '(--force -f)'{-f,--force}'[set branch name even if it shadows an existing branch]' \
439 '(--clean -C)'{-C,--clean}'[reset branch name to parent branch name]'
440 }
441
442 _hg_cmd_branches() {
443 _arguments -s -w : $_hg_global_opts \
444 '(--active -a)'{-a,--active}'[show only branches that have unmerge heads]'
417 } 445 }
418 446
419 _hg_cmd_bundle() { 447 _hg_cmd_bundle() {
420 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \ 448 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \
421 '(--force -f)'{-f,--force}'[run even when remote repository is unrelated]' \ 449 '(--force -f)'{-f,--force}'[run even when remote repository is unrelated]' \
569 _arguments -s -w : $_hg_global_opts \ 597 _arguments -s -w : $_hg_global_opts \
570 ':revision:_hg_tags' 598 ':revision:_hg_tags'
571 } 599 }
572 600
573 _hg_cmd_merge() { 601 _hg_cmd_merge() {
574 _arguments -s -w : $_hg_global_opts \ 602 _arguments -s -w : $_hg_global_opts \
575 '(--force -f)'{-f,--force}'[force a merge with outstanding changes]' \ 603 '(--force -f)'{-f,--force}'[force a merge with outstanding changes]' \
576 '(--rev -r)'{-r,--rev}'[revision to merge]:revision:_hg_branches' \ 604 '(--rev -r 1)'{-r,--rev}'[revision to merge]:revision:_hg_mergerevs' \
577 ':revision:_hg_branches' 605 '(--preview -P)'{-P,--preview}'[review revisions to merge (no merge is performed)]' \
606 ':revision:_hg_mergerevs'
578 } 607 }
579 608
580 _hg_cmd_outgoing() { 609 _hg_cmd_outgoing() {
581 _arguments -s -w : $_hg_global_opts $_hg_remote_opts $_hg_style_opts \ 610 _arguments -s -w : $_hg_global_opts $_hg_remote_opts $_hg_style_opts \
582 '(--no-merges -M)'{-M,--no-merges}'[do not show merge revisions]' \ 611 '(--no-merges -M)'{-M,--no-merges}'[do not show merge revisions]' \
702 '(--print0 -0)'{-0,--print0}'[end filenames with NUL, for use with xargs]' \ 731 '(--print0 -0)'{-0,--print0}'[end filenames with NUL, for use with xargs]' \
703 '--rev[show difference from revision]:revision:_hg_tags' \ 732 '--rev[show difference from revision]:revision:_hg_tags' \
704 '*:files:_files' 733 '*:files:_files'
705 } 734 }
706 735
736 _hg_cmd_summary() {
737 _arguments -s -w : $_hg_global_opts \
738 '--remote[check for push and pull]'
739 }
740
707 _hg_cmd_tag() { 741 _hg_cmd_tag() {
708 _arguments -s -w : $_hg_global_opts \ 742 _arguments -s -w : $_hg_global_opts \
709 '(--local -l)'{-l,--local}'[make the tag local]' \ 743 '(--local -l)'{-l,--local}'[make the tag local]' \
710 '(--message -m)'{-m+,--message}'[message for tag commit log entry]:message:' \ 744 '(--message -m)'{-m+,--message}'[message for tag commit log entry]:message:' \
711 '(--date -d)'{-d+,--date}'[record datecode as commit date]:date code:' \ 745 '(--date -d)'{-d+,--date}'[record datecode as commit date]:date code:' \
726 } 760 }
727 761
728 _hg_cmd_update() { 762 _hg_cmd_update() {
729 _arguments -s -w : $_hg_global_opts \ 763 _arguments -s -w : $_hg_global_opts \
730 '(--clean -C)'{-C,--clean}'[overwrite locally modified files]' \ 764 '(--clean -C)'{-C,--clean}'[overwrite locally modified files]' \
731 '(--rev -r)'{-r+,--rev}'[revision]:revision:_hg_branchtags' \ 765 '(--rev -r)'{-r+,--rev}'[revision]:revision:_hg_tags' \
732 ':revision:_hg_branchtags' 766 ':revision:_hg_tags'
733 } 767 }
734 768
735 # bisect extension 769 ## extensions ##
736 _hg_cmd_bisect() { 770
737 _arguments -s -w : $_hg_global_opts ':evaluation:(help init reset next good bad)' 771 # bookmarks
772 _hg_bookmarks() {
773 typeset -a bookmark bookmarks
774
775 _hg_cmd bookmarks | while read -A bookmark
776 do
777 if test -z ${bookmark[-1]:#[0-9]*}
778 then
779 bookmarks+=($bookmark[-2])
780 fi
781 done
782 (( $#bookmarks )) && _describe -t bookmarks 'bookmarks' bookmarks
783 }
784
785 _hg_cmd_bookmarks() {
786 _arguments -s -w : $_hg_global_opts \
787 '(--force -f)'{-f,--force}'[force]' \
788 '(--rev -r --delete -d --rename -m)'{-r+,--rev}'[revision]:revision:_hg_tags' \
789 '(--rev -r --delete -d --rename -m)'{-d,--delete}'[delete a given bookmark]' \
790 '(--rev -r --delete -d --rename -m)'{-m+,--rename}'[rename a given bookmark]:bookmark:_hg_bookmarks' \
791 ':bookmark:_hg_bookmarks'
738 } 792 }
739 793
740 # HGK 794 # HGK
741 _hg_cmd_view() { 795 _hg_cmd_view() {
742 _arguments -s -w : $_hg_global_opts \ 796 _arguments -s -w : $_hg_global_opts \
745 } 799 }
746 800
747 # MQ 801 # MQ
748 _hg_qseries() { 802 _hg_qseries() {
749 typeset -a patches 803 typeset -a patches
750 patches=(${(f)"$(_hg_cmd qseries 2>/dev/null)"}) 804 patches=(${(f)"$(_hg_cmd qseries)"})
751 (( $#patches )) && _describe -t hg-patches 'patches' patches 805 (( $#patches )) && _describe -t hg-patches 'patches' patches
752 } 806 }
753 807
754 _hg_qapplied() { 808 _hg_qapplied() {
755 typeset -a patches 809 typeset -a patches
756 patches=(${(f)"$(_hg_cmd qapplied 2>/dev/null)"}) 810 patches=(${(f)"$(_hg_cmd qapplied)"})
757 if (( $#patches )) 811 if (( $#patches ))
758 then 812 then
759 patches+=(qbase qtip) 813 patches+=(qbase qtip)
760 _describe -t hg-applied-patches 'applied patches' patches 814 _describe -t hg-applied-patches 'applied patches' patches
761 fi 815 fi
762 } 816 }
763 817
764 _hg_qunapplied() { 818 _hg_qunapplied() {
765 typeset -a patches 819 typeset -a patches
766 patches=(${(f)"$(_hg_cmd qunapplied 2>/dev/null)"}) 820 patches=(${(f)"$(_hg_cmd qunapplied)"})
767 (( $#patches )) && _describe -t hg-unapplied-patches 'unapplied patches' patches 821 (( $#patches )) && _describe -t hg-unapplied-patches 'unapplied patches' patches
822 }
823
824 # unapplied, including guarded patches
825 _hg_qdeletable() {
826 typeset -a unapplied
827 unapplied=(${(f)"$(_hg_cmd qseries)"})
828 for p in $(_hg_cmd qapplied)
829 do
830 unapplied=(${unapplied:#$p})
831 done
832
833 (( $#unapplied )) && _describe -t hg-allunapplied-patches 'all unapplied patches' unapplied
768 } 834 }
769 835
770 _hg_qguards() { 836 _hg_qguards() {
771 typeset -a guards 837 typeset -a guards
772 local guard 838 local guard
773 compset -P "+|-" 839 compset -P "+|-"
774 _hg_cmd qselect -s 2>/dev/null | while read guard 840 _hg_cmd qselect -s | while read guard
775 do 841 do
776 guards+=(${guard#(+|-)}) 842 guards+=(${guard#(+|-)})
777 done 843 done
778 (( $#guards )) && _describe -t hg-guards 'guards' guards 844 (( $#guards )) && _describe -t hg-guards 'guards' guards
779 } 845 }
787 853
788 _hg_cmd_qdelete() { 854 _hg_cmd_qdelete() {
789 _arguments -s -w : $_hg_global_opts \ 855 _arguments -s -w : $_hg_global_opts \
790 '(--keep -k)'{-k,--keep}'[keep patch file]' \ 856 '(--keep -k)'{-k,--keep}'[keep patch file]' \
791 '*'{-r+,--rev}'[stop managing a revision]:applied patch:_hg_revrange' \ 857 '*'{-r+,--rev}'[stop managing a revision]:applied patch:_hg_revrange' \
792 '*:unapplied patch:_hg_qunapplied' 858 '*:unapplied patch:_hg_qdeletable'
793 } 859 }
794 860
795 _hg_cmd_qdiff() { 861 _hg_cmd_qdiff() {
796 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ 862 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \
797 '*:pattern:_hg_files' 863 '*:pattern:_hg_files'
858 '(--all -a :)'{-a,--all}'[apply all patches]' \ 924 '(--all -a :)'{-a,--all}'[apply all patches]' \
859 '(--list -l)'{-l,--list}'[list patch name in commit text]' \ 925 '(--list -l)'{-l,--list}'[list patch name in commit text]' \
860 '(--merge -m)'{-m+,--merge}'[merge from another queue]:' \ 926 '(--merge -m)'{-m+,--merge}'[merge from another queue]:' \
861 '(--name -n)'{-n+,--name}'[merge queue name]:' \ 927 '(--name -n)'{-n+,--name}'[merge queue name]:' \
862 '(--force -f)'{-f,--force}'[apply if the patch has rejects]' \ 928 '(--force -f)'{-f,--force}'[apply if the patch has rejects]' \
929 '--move[reorder patch series and apply only the patch]' \
863 ':patch:_hg_qunapplied' 930 ':patch:_hg_qunapplied'
864 } 931 }
865 932
866 _hg_cmd_qrefresh() { 933 _hg_cmd_qrefresh() {
867 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_commit_opts \ 934 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_commit_opts \
904 '(--backup -b)'{-b,--backup}'[bundle unrelated changesets]' \ 971 '(--backup -b)'{-b,--backup}'[bundle unrelated changesets]' \
905 '(--nobackup -n)'{-n,--nobackup}'[no backups]' \ 972 '(--nobackup -n)'{-n,--nobackup}'[no backups]' \
906 ':revision:_hg_tags' 973 ':revision:_hg_tags'
907 } 974 }
908 975
976 # Patchbomb
977 _hg_cmd_email() {
978 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \
979 '(--git -g)'{-g,--git}'[use git extended diff format]' \
980 '--plain[omit hg patch header]' \
981 '(--outgoing -o)'{-o,--outgoing}'[send changes not found in the target repository]' \
982 '(--bundle -b)'{-b,--bundle}'[send changes not in target as a binary bundle]' \
983 '--bundlename[name of the bundle attachment file (default: bundle)]:' \
984 '*'{-r+,--rev}'[search in given revision range]:revision:_hg_revrange' \
985 '--force[run even when remote repository is unrelated (with -b/--bundle)]' \
986 '*--base[a base changeset to specify instead of a destination (with -b/--bundle)]:revision:_hg_tags' \
987 '--intro[send an introduction email for a single patch]' \
988 '(--inline -i --attach -a)'{-a,--attach}'[send patches as attachments]' \
989 '(--attach -a --inline -i)'{-i,--inline}'[send patches as inline attachments]' \
990 '*--bcc[email addresses of blind carbon copy recipients]:email:' \
991 '*'{-c+,--cc}'[email addresses of copy recipients]:email:' \
992 '(--diffstat -d)'{-d,--diffstat}'[add diffstat output to messages]' \
993 '--date[use the given date as the sending date]:date:' \
994 '--desc[use the given file as the series description]:files:_files' \
995 '(--from -f)'{-f,--from}'[email address of sender]:email:' \
996 '(--test -n)'{-n,--test}'[print messages that would be sent]' \
997 '(--mbox -m)'{-m,--mbox}'[write messages to mbox file instead of sending them]:file:' \
998 '*--reply-to[email addresses replies should be sent to]:email:' \
999 '(--subject -s)'{-s,--subject}'[subject of first message (intro or single patch)]:subject:' \
1000 '--in-reply-to[message identifier to reply to]:msgid:' \
1001 '*--flag[flags to add in subject prefixes]:flag:' \
1002 '*'{-t,--to}'[email addresses of recipients]:email:' \
1003 ':revision:_hg_revrange'
1004 }
1005
909 _hg "$@" 1006 _hg "$@"