概要
公式のGit GUIのように、SourceTreeもコンテキストメニュー(右クリックで開くメニュー)から起動したかったので、コンテキストメニューに「SourceTreeで開く」を追加した。
環境
- Windows 10 21H2 19044.2486
- SourceTree 3.4.11
前提知識
レジストリエディタを使用したコンテキストメニューのカスタマイズ
Windows 10では、「Windowsキー + R」を押して「regedit」と入力すると、レジストリエディタが起動する。レジストリエディタで、最適な場所に最適な内容を書き込むと、コンテキストメニューをカスタマイズできる。
レジストリエディタでは、キーと値を使って情報が管理されている。しかし、これはプログラミング言語におけるハッシュのようなものではなく、どちらかというとディレクトリやファイルに近い。キーはディレクトリに対応し、値はファイルに対応する。そのため、キーの中に別のキーが入っていることもあれば、キーの中に複数の値が入っていることもある。
どこを右クリックした時のコンテキストメニューを編集したいかによって、編集すべきレジストリキーは異なる。例えば、任意のディレクトリを右クリックした時のメニューをカスタマイズしたいなら「HKEY_CLASSSES_ROOT\Directory」を編集し、エクスプローラの何もない場所を右クリックした時のメニューをカスタマイズしたいなら「HKEY_CLASSES_ROOT\Directory\Background」を編集する。
右クリックする場所と編集するレジストリキーの対応は、以下のサイトに分かりやすくまとめられている。
コンテキストメニューに項目を追加するには、アクションに対応するキーの中の、shellに好きな名前のキーを追加する。例えば、「HKEY_CLASSSES_ROOT\Directory\shell」の下に「hoge」キーを追加すると、ディレクトリを右クリックした時のメニューに「hoge」が追加される。
追加した「hoge」キーの中に「Command」キーを作り、その中の「(規定)」に任意のコマンドを入力することで、コンテキストメニューで「hoge」がクリックされた場合の処理を変更できる。
レジストリエディタで使用可能なプレースホルダー
レジストリエディタのコマンド指定では、複数のプレースホルダーが使える。例えば「%W」では、右クリックされた場所のパスを受け取れる。
使用可能なプレースホルダーは、以下のサイトにまとめられている。
上記サイトにも書かれているように、各プレースホルダーはアクションごとに使える場合と使えない場合がある。例えばエクスプローラの背景をクリックするアクションでは「%W」は使えるが「%1」は使えない。そして、特定のアクションで特定のプレースホルダーを使うとクラッシュする場合があるため、適当にプレースホルダーを試すのは危険である。
コマンドラインからSourceTreeを起動
Windowsでは、以下のコマンドを実行すると、<path>を開いた状態のSouceTreeを起動できる。
SourceTree.exe -f <path>
コンテキストメニューに「SourceTreeで開く」を追加する手順
エクスプローラの何もない場所を右クリックした時のメニューに「SouceTreeで開く」を追加する手順は以下の通り。
- 「Windowsキー + R」を押し、「regedit」と入力する。
- 「HKEY_CLASSES_ROOT\Directory\Background\shell」キーを右クリックし、「新規」→「キー」の順で選択。
- キーの名前を好きな名前に変更する。ここで付けた名前がコンテキストメニューに表示される。ここでは「origSourceTree」とする。
後のSouceTreeのバージョンでコンテキストメニューへの項目の追加が実装され、公式の実装と競合する危険性を考え、「SourceTree」などは避けたほうが良いかもしれない。 - 「origSourceTree」を右クリックし、「新規」→「キー」の順で選択。次はキーの名前を「Command」にする。
- 「Command」をクリックすると、すでに「(規定)」が作成されている。「(規定)」を右クリックし、「修正」をクリック。
- 表示されたウィンドウの「値のデータ」の欄に以下のコマンドを入力。
SourceTree.exe -f %W
「SourceTree.exe」は実際のSourceTree.exeのパスに変更すること。僕の環境では「C:\Users\king\AppData\Local\SourceTree\SourceTree.exe」だった。
ここまで作業を終えれば、レジストリエディタは以下の状態になっているはず。
注意
Gitリポジトリが存在しないパスからSoureTreeを起動しても、New Tab画面のSoureTreeが起動してしまう。最初のgit initは手動でやるしかない。