Nyagos の拡張 (主に Subversion 用 Lua スクリプト)
前回は Nyagos を tcsh 風に使うようにするための変更についてまとめました。
今回は、それに加えてもう少し Subversion まわりについて拡張してみました。
できること
作成した vcs_info.lua
で、以下のことができます。
svn ls https://github.com/masamitsu-murase/nyagos.git/trunk/[Tab]
のように、svn
で始まる場合に URL のパスに対しても補完することができます。VcsInfo.box_svn_revisions(path)
のように呼ぶことで、C-x C-g
の git のリビジョン選択のように、 Subversion のリビジョンを選択することができます。VcsInfo.check_vcs_branch()
で、現在のパスが svn, git, hg のいずれかを判別し、返してくれます。
また、 git, hg の場合はブランチ名を、 svn の場合は親ディレクトリの名前を、二つ目の戻り値として返してくれます。
必要なファイルは nyagos.d/catalog/vcs_info.lua として GitHub に置いてあります。
このファイルを nyagos.d/catalog
以下に置き、 .nyagos
でいくつか設定をします。
Subversion の URL の補完
この機能を使うには、 vcs_info.lua
を .nyagos
で use するだけです。
.nyagos
の例を見てください。
このスクリプトを使うと、svn
で始まるときに限り、後続の URL を補完してくれます。
svn ls
コマンドで、リポジトリのディレクトリを見ながら補完するので、環境によってはやや遅いですが、私としてはそれなりに快適に使えています。
また、デフォルトでは直前の補完結果を 10秒間はキャッシュしていますので、連続で Tab を押したときは軽快に動くようになっています。
Subversion のリビジョンの選択
コマンドラインでマージをする際に、マージ対象のリビジョンを手で入力するのは面倒です。
git の場合は、 C-x C-g
でログを表示し、ハッシュ値を入力することができますが、これと同じようなことができることを目指しました。
この機能を使う場合、 box.lua のコードを参考に、以下のようなコードを .nyagos に追加する必要があります。
上記のように、 VcsInfo.find_svn_path
で現在のコマンドライン入力の中から URL らしきものを探し、 VcsInfo.box_svn_revisions
でリビジョンを選択することができます。
git, svn, hg のブランチ名の取得
VcsInfo.check_vcs_branch
を呼ぶことで、現在のディレクトリのブランチ名を取得することができます。
以下のようなルールでブランチ名を取得しています。
- git, hg
git rev-parse --abbrev-ref HEAD
やhg branch
でブランチ名を取得しています。- svn
- 現在のディレクトリを含むチェックアウトツリーのルートディレクトリを探し、その一つ上のディレクトリ名を取得します。
例えば、http://example.com/trunk
をチェックアウトしたディレクトリ以下なら、trunk
を返します。
同様に、http://example.com/branches/feature_a
をチェックアウトしたディレクトリ以下なら、feature_a
を返します。
私は、この機能を用いて以下のようにプロンプトを表示しています。
このスクリプトだと、以下のようにプロンプトが表示されます。
もちろん、 Subversion のディレクトリ名が日本語を含む場合でも、適切に動作します。
Nyagos は Lua で拡張できるおかげで、割と楽に拡張することができました。
0 件のコメント:
コメントを投稿