- 記事一覧 >
- ブログ記事
AutoHotkeyを使って、Open Git Bash hereのキーボードショートカットを作成
はじめに
突然ですが、みなさん、"Open Git Bash here" を活用されていますでしょうか?
Git for Windows をインストールすると、Linux コンソールのような Git Bash がおまけでインストールされます。
これがものすごく便利です。Windows 標準で欲しいくらいです。
例えば、「あれ、どの設定ファイルに書いてあったっけ?」とかなったときに、
設定ファイルが含まれているフォルダをエクスプローラーで開いておいて、
右クリックメニューで、"Open Git Bash here" を選択して、$ grep -r "hogehogesettei" settings/
のように grep
で探せます。他にも find
、vi
等々いろいろあります。Windows のまま Unix 脳が活用できるというものです。
しかし...
Windows 11 になったとき、右クリック → その他のオプションを確認 → Open Git Bash here の操作が必要になりました。
無慈悲にも その他のオプションを確認 の操作が追加されてしまったのです。
Windows 11 22H2 からは、SHIFT + 右クリックで、従来のメニューが表示されるようになったため、1ステップですが、SHIFT を押すのが若干面倒です。
SHIFT を押し忘れたり、タイミングが遅かったりすると、当然、Open Git Bash here が表示されないメニューが開きます。
今回、この不満を解消し、AutoHotkey を使って、CTRL + Space
だけで Open Git Bash here が起動するようにしましたので、その全手順を紹介していきたいと思います。
【検証環境】
Windows 11 PRO x64 23H2
Windows 11 PRO x64 22H2
Windows 10 PRO x64 22H2
Windows 10 PRO x64 20H2
Git-2.42.0.2-64-bit
AutoHotkey_2.0.10(v1.1.37.01)
AutoHotkey 専用のスクリプト言語(AHK)を記述します。内容次第で、
CTRL + Space
以外にもできます。(例:CTRL + ALT + T
)また、AutoHotkey のスクリプト内容次第で他の用途にも使用できます。AutoHotkey v2 移行期でプログラムの後方互換性が無いようですが、2023 年 11 月現在、v2 のサンプルが少ないため、v1 で進めます。
Git Bash インストール
Git for Windows をダウンロードしてインストールします。
https://git-scm.com/download/win
今回は、ダウンロードしたのは、Git-2.42.0.2-64-bit.exe です。
ダブルクリックしてインストールします。
今回、全てデフォルトの選択で進めたものとします。
↑
このチェックボックスの選択を含め、何も変更していません。
AutoHotkey インストール
AutoHotkey v2.0.10 をダウンロードしてインストールします。
https://www.autohotkey.com/download/
今回、v1 対応スクリプトのため、後で v1.1.37.01 を途中でインストールします。
スクリプト作成
AutoHotkey Dash を開いて、New script を選択します。
ファイル名部分を「git_bash_here」とし、
保存先フォルダは、C:\Users\admin\Documents\AutoHotkey
とします。(任意です。)
Empty を選択して、Create をクリックします。
C:\Users\admin\Documents\AutoHotkey
に空の内容のgit_bash_here.ahk
が作成されるため、メモ帳などのエディタで内容を記述して、上書き保存します。
スクリプトの内容と意味は、以下の通りです。
コメントに意味を記載しています。
コメント部分は削除しても構いません。
#NoEnv ; 環境変数を使用しない(推奨テンプレート的なコード)
SendMode Input ; 再生中に予期せぬウィンドウが現われて動作が妨げられるのを防ぐ(推奨テンプレート的なコード)
SetWorkingDir %A_ScriptDir% ; スクリプトの作業ディレクトリをスクリプト自身が存在するディレクトリに設定(推奨テンプレート的なコード)
SetBatchLines, -1 ; スクリプトを一時停止無しにして最大速度で実行
#NoTrayIcon ; タスクトレイにアイコンを表示しない
SetTitleMatchMode RegEx ; ウィンドウのタイトルを指定する際に正規表現を使用することを許可
return
#IfWinActive ahk_class ExploreWClass|CabinetWClass ; Windows Explorerがアクティブなときにのみ次のホットキーが有効になるようにする
^Space:: ; Ctrl+Spaceで次の関数が呼び出される
OpenGbHere() ; OpenGbHereという名前の関数を呼び出し
return ; ホットキーの処理を終了
#IfWinActive ; #IfWinActiveディレクティブを終了
GetActiveExplorerTab(hwnd:="") ; "GetActiveExplorerTab"という関数を定義。引数はウィンドウハンドル"hwnd"で、デフォルト値は空文字列
{
static IID_IShellBrowser := "{000214E2-0000-0000-C000-000000000046}" ; "IID_IShellBrowser"という静的変数を定義し、その値を"{000214E2-0000-0000-C000-000000000046}"に設定。{000...}はシェルブラウザのインターフェース識別子
activeTab := 0, hwnd := hwnd ? hwnd : WinExist("A") ; "activeTab"という変数を0に初期化し、"hwnd"が指定されていない場合は現在アクティブなウィンドウのハンドルを取得
try
ControlGet, activeTab, Hwnd,, ShellTabWindowClass1, ahk_id %hwnd% ; アクティブなタブのウィンドウハンドルを取得
catch
try
ControlGet, activeTab, Hwnd,, TabWindowClass1, ahk_id %hwnd% ; アクティブなタブのウィンドウハンドルを取得
for w in ComObjCreate("Shell.Application").Windows { ; シェルアプリケーションのすべてのウィンドウをループ
if (w.hwnd != hwnd) ; ウィンドウのハンドルがアクティブなウィンドウハンドルと一致しない場合はスキップ
continue
if (activeTab) { ; アクティブなタブがある場合、true
shellBrowser := ComObjQuery(w, IID_IShellBrowser, IID_IShellBrowser) ; シェルブラウザのインターフェースを取得
DllCall(NumGet(NumGet(shellBrowser+0), 3*A_PtrSize), "UPtr",shellBrowser, "UIntP",thisTab:=0) ; 現在のタブを取得
if (thisTab != activeTab) ; 現在のタブがアクティブなタブと一致しない場合はスキップ
continue
}
return w ; 正しいタブを見つけたら、そのウィンドウを返す
}
}
OpenGbHere()
{
tab := GetActiveExplorerTab() ; 現在アクティブなエクスプローラータブを取得
switch ComObjType(tab.Document, "Class") ; 現在のタブの種類に基づいて異なるアクションを実行
{
case "ShellFolderView": ; 現在のタブが通常のフォルダを表示している場合のアクションを定義
full_path := tab.Document.Folder.Self.Path ; 現在のフォルダのフルパスを取得
StringReplace, full_path, full_path, `r, , all ; 念のため - すべてのキャリッジリターン (`r) を削除
IfInString full_path, \ ; フルパスがバックスラッシュを含むかどうかをチェック
{
Run, C:\Program Files\Git\git-bash.exe, %full_path% ; フルパスがバックスラッシュを含む場合、そのパスでGit bashを開く
}
else
{
Run, C:\Program Files\Git\git-bash.exe --cd-to-home ; フルパスがバックスラッシュを含まない場合、ホームディレクトリでGit bashを開く
}
default: ;case "HTMLDocument": ; 現在のタブがHTMLドキュメント(Webページなど)を表示している場合のアクション
Run, C:\Program Files\Git\git-bash.exe --cd-to-home ; ホームディレクトリでGit bashを開く
}
}
https://gist.github.com/yiboyang/c4a4656660cfd0503b7f46e9edbb6f72
を参考にさせていただきました。そのままいけるかと思ったのですが、今回の検証環境では、
WinGetText, full_path, A
で full_path を捉えることができず、
https://www.autohotkey.com/boards/viewtopic.php?f=83&t=109907
を参考にして(と言うかコピペして)エクスプローラーで開いているパスを取得するようにしました。このコードは素晴らしく、エクスプローラーでタブを使っていても開いているパスを取得します。
エクスプローラーのタブは、Windows 11 22H2 以降の機能です。
AHK 実行
git_bash_here.ahk
を右クリック → プログラムから開く → AutoHotkey Launcher で AHK スクリプトを起動します。
しかし、今回の場合、AutoHotkey v2 をインストールしたのに、 v1 形式のスクリプトを起動したため、自動認識されて、v1 をインストールするように促されます。
v2 で v1 形式のスクリプトは実行できないため、素直にインストールします。
もう一度、git_bash_here.ahk
を右クリック → プログラムから開く → AutoHotkey Launcher で AHK スクリプトを起動します。
特に何も起きません。
動作確認
エクスプローラーでどこかフォルダを開いて、CTRL + Space
を押します。
Open Git Bash here ヨシッ!
タブがあっても大丈夫です。(間違って、先頭のタブのパスで開くとかは無いです。)
Open Git Bash here!
Startup 登録
まだこのままの場合、Windows を再起動すると、CTRL + Space
が無反応になります。
git_bash_here.ahk
のショートカットをC:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
に置く必要があります。
%username%
部分は、エクスプローラーのパス入力欄に張り付ければ、ユーザー名に置き換わります。
以下のように設置しておけば、Windows を再起動しても、CTRL + Space
で Open Git Bash here です。
Open Git Bash here ヨシッ!
その他、宣伝、誹謗中傷等、当方が不適切と判断した書き込みは、理由の如何を問わず、投稿者に断りなく削除します。
書き込み内容について、一切の責任を負いません。
このコメント機能は、予告無く廃止する可能性があります。ご了承ください。
コメントの削除をご依頼の場合はTwitterのDM等でご連絡ください。