Mercurial zsh completion with vim

How to re-format output of hg help <command> for use in Mercurial zsh_completion file.

We start with simple generic template copied from some other command like export:

_hg_cmd_graft() {
  _arguments -s -w : $_hg_global_opts \
  '*:revision:_hg_labels'
}

Let’s copy graft-specific options from hg help graft output:

-c --continue    resume interrupted graft
-e --edit        invoke editor on commit messages
   --log         append graft info to log message
-D --currentdate record the current date as commit date
-U --currentuser record the current user as committer
-d --date DATE   record the specified date as commit date
-u --user USER   record the specified user as committer
-t --tool VALUE  specify merge tool
-n --dry-run     do not perform actions, just print output

Now select help text and reformat it with a bit of regexps:

:'<,'>s:^\s\+\(-[a-zA-Z0-9]\) \(--[a-z-]\+\)\s\+:  '(\2 \1)'{\1,\2}'[

:'<,'>s:^\s\+\(--[a-z-]\+\)\s\+:  '\1[

:'<,'>s:$:]' \

:'<,'>s:'\[[A-Z]\+\s\+:'[

And the result is:

_hg_cmd_graft() {
  _arguments -s -w : $_hg_global_opts \
  '(--continue -c)'{-c,--continue}'[resume interrupted graft]' \
  '(--edit -e)'{-e,--edit}'[invoke editor on commit messages]' \
  '--log[append graft info to log message]' \
  '(--currentdate -D)'{-D,--currentdate}'[record the current date as commit date]' \
  '(--currentuser -U)'{-U,--currentuser}'[record the current user as committer]' \
  '(--date -d)'{-d,--date}'[record the specified date as commit date]' \
  '(--user -u)'{-u,--user}'[record the specified user as committer]' \
  '(--tool -t)'{-t,--tool}'[specify merge tool]' \
  '(--dry-run -n)'{-n,--dry-run}'[do not perform actions, just print output]' \
  '*:revision:_hg_labels'
}

Vim have helped you as it could, now decide is there anything left to be done.

Comments

Comments powered by Disqus