## 概要 `Ctrl+J`を押したあとに`O`を押したらコマンドを実行する...といった[[Vim]]や[[JetBrains IDE]]、[[VSCode]]のような[[2キーバインド]]設定をしたい。 ## ソリューション ### [[Leader Hotkeys for Obsidian]]を使う もし動くなら[[Leader Hotkeys for Obsidian]]プラグインを使うのが一番楽だと思います。私は以下の理由で当時見送りました。(今はどうか分からない) - 対応しているコマンドが少ない - Previewモードで動作しない ### [[Karabiner-Elements]]を使う ([[macOS]]ユーザー向け) [[Karabiner-Elements]]の設定で[[2キーバインド]]を実現できます。 > [!attention] > 私は[[karabiner.ts]]を使っているので[[Karabiner-Elements]]の設定方法は把握していません。 [[karabiner.ts]]で設定を書いている場合は以下のように設定できます。 ```ts modifierLayer("command", "j").leaderMode().manipulators([{ e: toKey("f13", "command"), // [AQS] recent serarch h: toKey("f17"), // [AQS] backlink search }]); ``` [[karabiner.ts]]を用いた設定例として、私の[[macOS]]用カスタマイズプロジェクトも参考にしてください。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" /> <span class="link-card-v2-site-name">GitHub</span> </div> <div class="link-card-v2-title"> toki/karabiner/README.md at 3e6791ca79fc0bf7704a9c331f0c701ff661dc5c · tadashi-aikawa/toki </div> <div class="link-card-v2-content"> macOSのセットアップ/カスタマイズプロジェクト 誓いの時は来た! 今 わたしは あなた(Windows)を超える!! - tadashi-aikawa/toki ... </div> <img class="link-card-v2-image" src="https://repository-images.githubusercontent.com/977129105/89cc86a4-ebae-4927-8d0e-a1707375fb45" /> <a href="https://github.com/tadashi-aikawa/toki/blob/3e6791ca79fc0bf7704a9c331f0c701ff661dc5c/karabiner/README.md"></a> </div> ### [[AutoHotkey]]を使う ([[Windows]]ユーザー向け) [[Windows]]で[[AutoHotkey]]を使っている方なら一番確実な方法です。ここでは`Ctrl+J`,`O`にコマンドを割り当てるコード例を紹介します。 #### `Ctrl+J`を押したあとであるかの判定コード `isSecondKeyAfterCtrlJ`を作ります。 ```autohotkey ;【概要】現在押下されているキーがCtrl+jの後に押されたものかを返します。 ;【引数】なし ;【戻値】true: 押されている isSecondKeyAfterCtrlJ() { return (A_PriorHotKey = "$^j") } ``` #### プロセスがアクティブかを判定するコード `isActiveProcess`を作ります。 ```autohotkey ;【概要】指定されたプロセスがアクティブであるか ;【引数】name: プロセス名 ;【戻値】true / false isActiveProcess(name) { WinGet, ahk_process, ProcessName, A return ahk_process == name } ``` #### [[Obsidian]]がアクティブならキーをリマップするコード [[Obsidian]]がアクティブなときは`Ctrl + j`を無効化します。[[Leaderキー]]を[[Obsidian]]がキャッチして意図せぬ動作になるのを防ぐためです。 ```autohotkey $^j:: if (isActiveProcess("Obsidian.exe")) { // DO NOTHING } else { Send, ^j } return ``` 先ほど作成した`isSecondKeyAfterCtrlJ`と`isActiveProcess`を使ってリマップします。このとき、リマップするキーは`F13`~`F24`がオススメです。 ```autohotkey $f:: if (isActiveProcess("Obsidian.exe") && isSecondKeyAfterCtrlJ()) { Send, {F13} } else { Send, f } ``` あとは、[[Obsidian]]で`F13`キーに割り当てたい機能を割り当てればOKです。参考までに、私の場合は[[🦉Another Quick Switcher]]の[[Header floating search in file]]を割り当てています。 > [!hint] `F13`~`F24`がオススメな理由 > [[AutoHotkeyの押しっぱなし問題]]を避けるためです。