表題の通りです。GinnieからGitExtensionsを直接起動できるスクリプトを作ってみました。コレさえあれば、リポジトリ下のファイルを編集中にワンタッチでファイルをコミットできます。
スクリプト
GitCommit.js
var wsh = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var command = App.ParamCount > 0 ? App.Params(0) : "commit";
var path = fso.buildPath(wsh.RegRead("HKCU\\Software\\GitExtensions\\InstallDir"), "GitExtensions.exe")
if(fso.fileExists(path)){
// .gitフォルダを探索
var doc = Documents.newDocument();
if(doc.save()){
var folder = fso.getFolder(fso.getParentFolderName(doc.fileName))
try{
while(!fso.folderExists(fso.buildPath(folder.path, ".git"))){
folder = folder.parentFolder;
}
var shell = new ActiveXObject("WScript.Shell");
shell.run(format("\"{0}\" {1} \"{2}\"", path, command, folder.path));
}catch(e){
Dialogs.Alert("リポジトリルートフォルダが発見できませんでした。リポジトリではない可能性があります\n" + e.message);
}
}
}else{
Dialogs.Alert("Git Extensionsがインストールされていません");
}
App.Quit();
function format(string)
{
var text = string;
for(var i = 1; i < arguments.length; i++)
{
text = text.replace("{" + (i - 1) + "}", arguments[i]);
}
return text;
}
リポジトリ
https://github.com/TakamiChie/ginnie-scripts にて公開しているのでそちらからもどうぞ
つかいかた
- Ginnieのマクロ>スクリプトファイル>設定 より、マクロの設定画面を開く
- 「追加」ボタンより、上記スクリプトファイルを追加する(パラメータなどは不要)
- リポジトリ下のファイルを編集中に、先ほど登録したスクリプトを実行する
で、Git Extrensionsのインストールがちゃんとできていれば、GitExtensionsのコミットダイアログが表示されます。
なお、Git Extensionsが必須です(インストーラによりインストール済みである必要があります)。無い場合はスクリプトが動きません
しくみ
やっていることは次のような感じ。
- レジストリのインストール情報より、Git Extensionsのパスを取得
- 現在開いているドキュメントを上書き保存(この時点でファイルが未作成の場合、名前をつけて保存ダイアログが表示される(キャンセルすると、その後の処理が実行されない))
- 現在開いているファイルのフォルダパスを探索し、リポジトリのルートフォルダを探す(.gitフォルダを探索する)
- GitExtensionsにcommitオプションをつけて起動する
これでとりあえずコミットダイアログが開きます。文章やIDEのないスクリプトを書いている人には便利じゃないでしょうか。
おまけ
マクロ実行時のパラメータに「openrepo」などGitExtensionsがサポートしているパラメータを指定すると、リポジトリにそれぞれ該当オプションの操作を行うことができます。
こんな感じですね。
とりあえずパラメータなし(commit)とopenrepoをメニュー項目として登録しておくと何かと捗るかと。