やりたいことは特定のアプリをどこからでもショートカットキーで呼び出せるようにし、 かつ、同じボタンでそのアプリを隠すことが出来るようにすることです。
Windows + AutoHotkey
Windowsでは AutoHotkey を使います。
基本的には [AutoHotkey v2]https://ahkscript.github.io/ja/docs/v2/)( であることを前提に書いています。
ChromeをToggleするHotkey設定としてはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Ctrl-Alt-CでChromeをトグル表示するHotkeyを書いています。
現状アクティブになっている場合にはAlt-Tabで1つ前のアプリに戻るようにしています。 これ何度も連続で使うとちょっと不安定にAlt-Tabの表示が残ってしまうこともありますが、 一回であればスムーズに動作してくれるので取り敢えずこれで。
WinMinimize
という最小化する関数もあるのでもし最小化のほうが良ければそれで。
WinClose
で閉じてしまう事もできますがWindowsだと最後のWindowの場合アプリ自体が終了してしまって次の起動が遅くなるので注意。
アクティブでない場合でウィンドウがあればWinActivate
で前面に出すようにしています。
これだと複数同じアプリのウィンドウがある場合は最後にアクティブだったものが前面に出ますが、
もし必要であればahk_exe chrome.exe
を全体的にタイトル名に変えるなどで特定のウィンドウを指定することもできます。
アクティブでもなくてウィンドウもない場合にはRun
でアプリを立ち上げます。
立ち上げるだけだとアクティブにならないのでWinActivate
してやる必要がありますが、
即行うとアプリが立ち上がる前で認識できないのでWinWait
で待ってからWinActivate
しています。
この例ではChromeで、立ち上げるアプリがA_ProgramFiles
(\C:\Program Files (x86) or \C:\Program Files)の下にありますが、
Obsidianなどは通常ユーザーディレクトリの中のAppData\Localの中にあります。
AutoHotkeyにはA_AppData
という変数が定義されていますが、これは
AppData\Roaming
のパスを返すのでLocal
を見たいときには上のようにA_UserName
を使って書くしかありません。(多分)
Chromeなどは\C:\Program Files (x86)の下にありますが、 Obsidianなどはユーザーディレクトリの中のAppData\Localの中にあるのでそれぞれ場所を指定しています。
"C:\Users\" A_UserName "\AppData\Local\obsidian\Obsidian.exe"
こんな感じのPathになります。AutohHotkeyにはA_AppData
という変数が定義されていますが、これは
AppData\Roaming
のパスを返すのでLocal
を見たいときには上のようにA_UserName
を使って書くしかありません。(多分)
このようにしてトグル表示を実現できますが、 複数のアプリでも同じ様なことをする場合には関数化しておくと便利です。
以下のようにしてAuto execute sectionでまとめて書くことが出来ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
こんな感じで、ToggleApp
という関数を使ってアプリをトグル表示するHotkeyをAuto execute sectionの中で書いています。
key
にはHotkeyのキーを指定します。
winName
はWindow Spyで見つけらるclassやexe, titleなどを指定しますが、基本的にはahk_exeを指定しておくのが無難です。
appPath
はアプリのパスを指定します。わからない場合はスタートメニューから該当のアプリの右クリックでファイルの場所を開くを開いて探して見てください。通常はそのファイルがさらにショートカットになっていることが多いので、それをまた右クリックしてファイルの場所を開くを開くと大元の位置が分かることが多いです。
Mac + Karabiner-Elements
macOSでは Karabiner-Elements を使います。
以下で使うfrontmost_application_history_index
がv15.3.6から導入されたもので、
これは現状ベータ版のみになっているので使う場合はベータ版にアップグレードする必要があります。
(現行のstableバージョンは15.3.0。)
- open_application Karabiner-Elements
- Add prev_application companion to the new open_application · Issue #4011 · pqrs-org/Karabiner-Elements
ChromeをToggleするHotkey設定としてはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
|
Windows同様に Ctrl-Alt-CでChromeをトグル表示するHotkeyを書いています。
アプリに対応するbundle_identifier
は
open_application
のヘルプの
Investigate the bundle identifier and file pathを参考にKarabiner-EventViewerを使って調べられます。
conditions
の方で使うbundle_identifiers
には正規表現で指定する必要があるので
1
^com\\.google\\.Chrome$
のように正規表現で指定します。
software_function.open_application
を使ってアプリを開くことができます。
すでにアプリが開いていればそれを前面に出すだけになるのでアプリが開いているかどうかを確認せずに
最前面がそのアプリでなければopen_application
でアプリを開くようにしています2。
アプリが前面にある際には”fromtmost_application_history_index": 1
で1つ前に最前面にあったアプリを前面に出すようにしています。
Windows版と違って直接直前のアプリを持ってこれるのでかなりスムーズな感じでToggle表示ができます。
同様に別のアプリも作っていくことが出来ます。
自分の設定は pqrs-org/KE-complex_modifications をforkした rcmdnk/KE-complex_modifications で作っていますが、 scripts/erb2json.rb の中に toggle_app という関数を作って、 src/json/personal_rcmdnk.json.erb の中に
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
こんな感じで書いてあります。
かなり前にForkしたままあとは自分で変更しただけで本家を追ってないので 現状の本家とはスクリプト等も結構違うかもしれませんが参考までに。
-
frontmost_application_if, frontmost_application_unless Karabiner-Elements ↩
-
アプリが開いているかどうか、を確認する方法は今のところない? 自動スプリクト的なものでvariableにいれるとかで無理やり出来るかも? ↩