zshでmercurialのactive branchesを補完する
この記事は、Mercurial Advent Calendar 2011 - [PARTAKE]の3日目の記事です.
みなさんいかがおすごしですか.
ゲームの中でもチーフに冷たくされてしょんぼりしているyuitowestです.
Mercurialを使っているとbranchをガンガン作ってガンガン切り替えます.
毎回 hg branches等でbranch名を確認して切り替えるのは面倒です.
そこでzshの補完機能を使って hg update のあとにactive branchを補完してくれるようにします.
まずはzshの補完関数を置くディレクトリを作ります.
$ > mkdir -p $HOME/.zsh/functions
pathを通します.
.zshrcに以下を記述します.
fpath=($HOME/.zsh/functions $fpath)
zsh補完関数を設置します.
touch $HOME/.zsh/functions/_hg vi $HOME/.zsh/functions/_hg
補完関数はこちら
Zsh completion script for mercurial — Gist
/path/to/zsh/4.3.11/functions/_hgを少々修正したものです.
--- a/_hg +++ b/_hg @@ -173,6 +173,17 @@ (( $#tags )) && _describe -t tags 'tags' tags } +_hg_branches() { + typeset -a branches + local branch rev + + _hg_cmd branches -a |awk '{print $1}' 2> /dev/null | while read branch + do + branches+=(${branch/ # [0-9]#:*}) + done + (( $#branches )) && _describe -t branches 'branches' branches +} + # likely merge candidates _hg_mergerevs() { typeset -a heads @@ -759,7 +770,7 @@ _arguments -s -w : $_hg_global_opts \ '(--clean -C)'{-C,--clean}'[overwrite locally modified files]' \ '(--rev -r)'{-r+,--rev}'[revision]:revision:_hg_tags' \ - ':revision:_hg_tags' + ':revision:_hg_branches' }
やりましたね.