Glide Note

glidenote's blog

githubのhubコマンドを補完するzsh補完関数を作ってみた

github用にhubというgitのラッパーコマンドがあることを会社で教えてもらって 使ってみたら、当然の如くzshの補完が効かなくてコマンドの使い方もよく分からなかったので、 コマンド理解とzsh補完関数の書き方の勉強も兼ねて自分で作ってみた。

最初はhubコマンドの補完関数を作ってたんですが、利用方法としてaliasを充てて gitの代わりに使うことが推奨されており、そもそもgitのラッパーで gitコマンドの補完も出来ないと意味が無いので、gitの補完関数自体に 手を入れて、hubのカスタムコマンドも利用出来るようにした。

検証環境は下記

  • Mac OSX 10.7.3, Scientific Linux 6.1
  • git version 1.7.7.5
  • hub version 1.8.2
  • zsh 4.3.11, 4.3.12

/usr/local/share/zsh/4.3.11/functions/_gitを元に修正した内容は下記

できあがったのがこちら

追記 2012年2月27日 githubに公開しました

利用方法

hubをあらかじめ導入しておいて、$fpath配下に上記補完関数を配置。 もとからある_gitと重複してもsite-functions配下に置くと 優先的にそちらが利用されます。

1
2
3
4
mkdir ~/src
cd ~/src
git clone git://github.com/glidenote/hub-zsh-completion.git
sudo cp hub-zsh-completion/_git /usr/share/zsh/site-functions/

.zshrcに下記を書いて、

1
alias git='hub'
1
exec zsh

をして、反映させる。

hubをgitのラッパーとして動作させると、git [tab]で下記hubカスタムコマンドが補完されるようになります。

1
2
3
4
5
browse              -- open repository's GitHub page in the system's default web browser
compare             -- open a GitHub compare view page in the system's default web browser.
create              -- repo created on GitHub
fork                -- repo forked on GitHub
pull-request        -- opens a pull request on GitHub for the project that the 'origin' remote points to.

それにしてもgitの補完関数6000行超えてて、同じようなのを自分で一から書こうとすると心が折れます。

参考

Comments