特定のアプリだけTomisuke配列を使う(Windows)
昨日の記事をDiscordのTomisuke配列コミュニティでご案内したところ、WindowsでAutoHotKey(以下AHK)を使っているなら「#IfWinActive
」で分ける方法があると教えて頂いた。試したところあっさりと成功したので、ここでご紹介する。Kさんありがとうございます。
なぜTomisuke配列とQWERTY配列の両方を同時に使いたいのかという要望については、昨日の記事に書いた。要望自体はWindowsでも同じである。
→「2台のキーボードでTomisuke配列とQWERTY配列を持ち替える(Mac)」
Mac+Karabiner-Elementsとの違い
Mac版の記事ではキーボードごとに配列を設定する方法だったが、このWindows版の記事ではアプリによって切り替える。ハードウェアによって切り替える方法もどこかにあるとは思うが、AHKを使ってキー配列を変えていれば導入が簡単なのが利点である。
キーボードごとに配列を設定したかったのは、モノを持ち替えると切替を強く意識するので誤操作防止にも役立つという意図もあった。しかし2台のキーボードは必ず持ち替えて使うことになるので、Tomisuke配列で使用するアプリをよく限定しておけばとりたてて問題はなさそうだ。
AHKスクリプトの構成
AHKのスクリプトでは、Tomisuke配列を規定する前に、書き物に使うアプリを特定のグループへ登録することによって、特定のアプリだけでTomisuke配列が機能するように設定する。具体的には次のような構成になる。
SetTitleMatchMode, 2 ←(1)
GroupAdd, UseTomisuke, ahk_exe Scrivener.exe ←(2)
GroupAdd, UseTomisuke, ahk_exe scapple.exe
GroupAdd, UseTomisuke, ahk_exe vivaldi.exe
GroupAdd, UseTomisuke, ahk_exe Evernote.exe
GroupAdd, UseTomisuke, ahk_exe Dynalist.exe
GroupAdd, UseTomisuke, ahk_exe Mery.exe
GroupAdd, UseTomisuke, ahk_exe iThoughts.exe
GroupAdd, UseTomisuke, ahk_exe ONENOTE.EXE
GroupAdd, UseTomisuke, ahk_exe Notion.exe
Return ← 忘れずに
#IfWinActive, ahk_group UseTomisuke ←(3)
(ここにTomisuke配列の設定を書く。以下のサンプルは亜流であり、本家とは異なる)
;1列目
-::sc073
;2列目
q::[
w::,
e::u
・・・・・
#IfWinActive ← 忘れずに
スクリプト解説
(1)ウィンドウタイトルを指定するときに、部分一致で検索するための設定。
(2)「GroupAdd, グループ名, ahk_exe プログラム名
」という構文で、指定したアプリをグループとして扱う。グループ名は自分で決めてよい。プログラム名はエクスプローラーに出てくるもの。複数のアプリを登録する場合でも、1行でまとめようとせず、繰り返したほうがよいようだ。
(3)Tomisuke配列を規定する行を「#IfWinActive, ahk_group グループ名 ~ #IfWinActive
」で挟む。
そのほか、サンプルで「忘れずに」と書いた行も忘れずに書く。
その他の設定については記事末尾の参考資料を参照。
どのアプリをTomisuke配列にするか
どのアプリをTomisuke配列で使うかという点については悩んだ。
ScrivenerやDynalisteのようなもっぱら原稿執筆に使うアプリや、Meryのようなテキストエディタ、EvernoteやNotionやOneNoteのようなノートアプリは当然Tomisuke配列で使う。悩んだのはWebブラウザやエクスプローラーだ。
Webブラウザといえども、フォームで長文を書くことは少なくない。この記事も短いのでWebブラウザで直接書いている。しかしどこかで混乱しそうでもある。そこで、個人的に常用しているVivaldiをTomisuke配列対応にして、Edgeは指定せずQWERTY配列用とした。
エクスプローラーは指定から外した。インストーラーでパスワードやシリアル番号を入力させるようなダイアログではキー入力を直接見ているものが多く(キーローガー対策だろうか)、何度入力してもエラーになるので調べてみたらQWERTY配列だったというケースが何度もあった。悔しくはあるが、システム標準の配列は違うのだということを思い出させるために、QWERTY配列を使うことにした。
QWERTY配列で使うアプリのほうが少ない場合
ここでは「書き物で使うアプリをTomisuke配列で使う」ことにしたが、「あえてQWERTY配列にしないアプリを除いてTomisuke配列で使う」場合もありそうだ。たとえば、DTVやDTMアプリだけQWERTY配列で使いたいケースが考えられる。
その場合は、「#IfWinActive
」ではなく「#IfWinNotActive
」を使い、特定のグループを除外する方法がある。
参考資料
GroupAdd
を使ったアプリのグループ化については、下記のページを参考にした。作者様ありがとうございます。
→「【AutoHotKey】複数ウィンドウを指定する3つの方法」(ナポリタン寿司のPC日記)
また、「#IfWinActive
」を使ってアプリごとにAHKスクリプトの動作を変える方法については、下記のページを参考にした。作者様ありがとうございます。
→「AutoHotkeyの使い方5ーウィンドウ・ソフトごとに動作を変えるー」(生焼けプログラマー雑記帳)
2022/12/16追記 オプトアウト方式へ変更した
「文字書きに使うアプリだけTomisuke配列」という方針でやってみたが、逆のほうがよかったかもしれない。
たとえば、Tomisuke配列を適用したVivaldiで開いたURLを、QWERTY配列のままであるLINEやOutlookへコピーするような場合だ。Ctrl+CしてCtrl+Vするだけだが、配列が違うことを考えてキーを押す必要がある。これはやっていられない。Tomisuke配列を使いたいアプリだけを指定するオプトイン方式ではなく、Tomisuke配列を使いたくないアプリを指定するオプトアウト方式へ変更したほうがよさそうだ。
そこで次のように書き換えて、「QWERTY配列のままにしたいアプリを指定して、それ以外のアプリでTomisuke配列を使う」設定へ変更した。
以下のとおり、エクスプローラーと、ビデオ編集のDavinci Resolveを指定した。今後また検討することになるだろう。
SetTitleMatchMode, 2
GroupAdd, UnuseTomisuke, ahk_exe Explorer.exe
GroupAdd, UnuseTomisuke, ahk_exe Resolve.exe
Return
#IfWinNotActive, ahk_group UnuseTomisuke
(ここにTomisuke配列の設定を書く)
#IfWinNotActive