普段、プログラムを書くのにVisual Studio Code(VSCode)を使っているのですが、VSCodeを使わずブラウザだけで作業を完結させたくて、最近、ブラウザ上で動くエディタ・開発環境を試しています。
以前、Emacsというエディタを使っていて、そのショートカットキーに慣れていたので、ブラウザ上で動くエディタも同じショートカットキーに設定しました。
しかし、ショートカットキーを設定しても、「Ctrl+pで印刷」といった、ブラウザ本来のショートカットキーの方が優先度が高いため、それらのブラウザのショートカットキーと同じキーは設定できませんでした。
ならば、ブラウザにキー入力が伝わる前に、キー入力をハックして、別のキー入力に変更するソフトがあればうまくいくんじゃないかと調べてみると、「AutoHotKey」というソフトが見つかりました。
試してみるとうまくいきました!
ブラウザのショートカットキーを無効にしたり、別の機能に設定することができるようになりました!
「AutoHotKey」はブラウザに限らず、あらゆるショートカットキーを好きな設定に変更できる強力なソフトなのですが、使い方は結構とっつきにくかったです…。
そこでここでは備忘録として、今回使用した機能の範囲内ではありますが、「AutoHotKey」の簡単な使い方をまとめてみました。
AutoHotKeyとは?
AutoHotKeyとは、キーボードやマウス入力をウォッチしていて、特定の入力が行われるとそれを検知して、別の入力やアクションを起こしてくれるソフトです。
オリジナルのショートカットキーを作成したり、既存のショートカットキーを上書きしたりできます。
インストール・実行
公式サイトからダウンロードしてインストールします。
すると、拡張子「ahk」が「AutoHotkKey」のファイルとして登録されます。
「AutoHotkKey」は単体で実行しても何もおこらず、ahkファイルにプログラムを記述して、そのプログラムを「AutoHotKey」で実行させて使います。
実行されるとトレイにアイコンが表示されます。
プログラムの書き方
- ウォッチするキーとその後に「:」コロンを2つ書く
- その下にアクションを書いていく
- 一連のアクションの最後に「return」を書いて終了する
- コメントは「;」と「/ ~ /」が使える
<ウォッチするキー>:: <アクション> . . return ; 1行コメント /* 複数行コメント */
例
前述の「Ctrl+p」に関しては、「カーソル上」に変更し、代わりに「Ctrl+Shift+p」で「印刷」するように設定したのですが、そのプログラムは下記のようになります。
^p:: Send, {Up} return ^+p:: Send, {Ctrl Down}p{Ctrl Up} return
「Ctrl+p」で「カーソル上」を送信し、「Ctrl+Shift+p」で、「Ctrl+p」を送信するようにしています。
Hotkey
ウォッチするするキーを「Hotkey」と呼び、下記のような書き方で指定します。
- 文字キーはそのまま書く
- 特殊キーの修飾
- Ctrlを押されていた場合は「^」を記述
- Shiftを押されていた場合は「+」を記述
- Altを押されていた場合は「!」を記述
例
; a a:: MsgBox, Press a return ; Ctrl + a ^a:: MsgBox, Press Ctrl + a return ; Ctrl + Alt + a ^!a:: MsgBox, Press Ctrl + Alt + a return
他にマウスボタンなどもHotkeyに指定できます。
Hotkeyはやり始めると色々凝ったことをやりたくなってくるかと思います。
AutoHotKeyは大抵の要望に対応できるように作られているのですが、やり方全てをここにはまとめきれなかったので、凝り始めたらヘルプを参照するのがよいかと思います。
https://www.autohotkey.com/docs/Hotkeys.htm
キーチェック
Hotkeyには「無変換」など、特殊なキーを割り当てることが多いのですが、そのキーの指定方法を調べるには下記のようにします。
- AutoHotKeyを起動
- 調べたいキーを入力
- [View]-[Key history and script info]
- すると、入力したキーの履歴が表示されます
- 「Key」項目に記載されていれば、そのままそれをHotkeyとして記述できます
- 「Key」項目が「not found」となっていた場合は、「SC」の値の頭に「sc」と付けたものをHotkeyとして記述します
例えば「無変換キー」に機能を割り当てる場合、「無変換キー」の「Key」は「not found」で「SC」は「07B」なので下記のようになります。
sc07b::
MsgBox, Press sc07b
return
Sendキーストロークの書き方
HotKeyが押された後、別のキー入力を発行するには「Send」コマンドを使います。発行するキーの書き方は下記になります。
- キーをそのまま書くと、そのキーのKey DownとKey Upが発行される
- 特殊キーは「{}」で囲む
- キーを押しながらの場合は、Key DownとKey Upを明示的に分ける
例えば、Ctrl+pで、「a」「カーソル上」「Ctrl+a」を発行するには下記のようになります。
^p:: Send, a{Up}{Ctrl Down}a{Ctrl Up} return
コマンドは複数に分けて記載しても構いません。
^p:: Send, a Send, {Up} Send, {Ctrl Down} Send, a Send, {Ctrl Up} return
ショートカットキーの無効化
HotKeyが押された後、何もアクションを書かずに「return」で終わると、ショートカットキーの無効化ができます。
^p::
return
特定のアプリのショートカットキーを設定する
Hotkeyを直接書くと、Windows全体で有効なショートカットキーになります。
「#IfWinActive」を使うと、指定したウィンドウだけ有効なショートカットキーにできるので、今回行った、ブラウザのショートカットキーだけを変更するといったことができます。
「#IfWinActive」の適用範囲は、次の「#IfWinActive」まで有効で、ウィンドウを指定しない「#IfWinActive」は、Windows全体のショートカットキーと同じです。
アプリを実行ファイル名で指定するには「#IfWinActive ahk_exe <実行ファイル名>」と書きます。
例えば、Chromeだけに「Ctrl+p」を設定し、全体に対して「Ctrl+a」を設定するには下記のようになります。
#IfWinActive ahk_exe chrome.exe ^p:: MsgBox, Window Chrome return #IfWinActive ^a:: MsgBox, Window All return
アプリ確認
アプリを指定したショートカットキーを設定する場合、アプリをアプリの実行ファイル名で指定します。
例えばChromeの場合、実行ファイルは「chrome.exe」になるのですが、AutoHotKeyを使って、どのウィンドウがどの実行ファイル名かを調べることができます。
- トレイのAutoHotKeyを右クリック
- [Window Spy]
- 調べたいウィンドウのタイトルをクリック
2文字以上のHotkey
Hotkeyは1回の入力に対して発動します。
Emacsには「Ctrl+x Ctrl+s で保存」といったように、2回の入力に対して発動するコマンドがあります。
そういった場合は、「KeyWait, <キー名>」を使って、1つ目のキーで発動させつつ、次のキーを待つことにより、擬似的に2つ以上のキー入力でアクションを発動させます。
; Ctrl+x Ctrl+s ^x:: KeyWait, x KeyWait, s D Send, {Ctrl Down}s{Ctrl Up}
「KeyWait, <キー名>」は、そのキーがUpされるまで待ち、「KeyWait, <キー名> D」は、そのキーがDownされるまで待ちます。
なので上記は、「Ctrl+x」が押されると、「x」が離されるまで待ち、次に「s」が押されるのを待って、「Ctrl+s」が発行されるといった処理を行っています。
Windows起動時実行
「ahk」ファイルが「AutoHotKey」に関連付けられているので、Windows起動時にAutoHotKeyを有効にするには、ahkファイルのショートカットをWindowsのスタートアップフォルダに入れておきます。
感想など
AutoHotKeyは特殊な機能のソフトなので、動作の安定性が不安でしたが、今の所安定して思った通りに動いてくれています。
AutoHotKeyは、機能が後からどんどん拡張されていったようで、仕様がかなりカオスですね。
参考記事
- https://knowledge.sakura.ad.jp/23305/
- https://wg16.hatenablog.jp/entry/autohotkey_001
- https://fuchiaz.com/usage-autohotkey/