はじめに
私は普段、資料作成でHackMDを使用しています。
HackMDにはSublime、VIM、Emacsのキーバインドが用意されています。私は、他のテキストエディタでEmacsのキーバインドを使用しているため、キーバインドを変更したいと思いました。しかし、Emacsのキーバインドがブラウザのショートカットと干渉する問題があり使用できなかったため、対処方法をまとめます。
この問題はMacの場合にはOS標準機能でソフトごとにショートカットの設定ができることから問題になりません。
使用環境
OS:Windows11 Home 23H2
ブラウザ:Arc(Chromium)
キーボードドライバ:Razer Synapse
問題点
Emacsのキーバインドの一部を示します。CがCtrl、MがAltを表しています。
ショートカット名 | Sublime | Emacs |
---|---|---|
コピー | C-c | M-w |
カット | C-x | C-w |
1行カット | C-Shift-k | C-k |
この3つを見るとEmacsのカットのショートカットがChrome(Chromium)のタブを閉じるショートカットと鑑賞しています。
これは厄介な問題でこのショートカットは無効にすることが難しいです。
このような拡張を入れて無効化することはできます。しかし、このような拡張機能でショートカットを無効化してしまうとHackMDでも設定したキーの組み合わせが無効化されてしまいます。
ブラウザがキー入力を受け付ける流れ
拡張なし
拡張あり
このようにWindows OSからWebサイトへは直接入力を受け付けていません。しかも特定のショートカットが使えるサイトでは、JavaScriptが入力を受け取っています。このとき、ブラウザのショートカットを無効化する拡張を入れるとJavaScriptは入力を受け取れなくなります。したがって、ブラウザ拡張による無効化は意味がありません。
対策
PowerToysのKeybord Managerを使用することでEmacsのキーバインドを模倣しました。
PowerToysはWindows11に搭載できなかったけどMicrosoftとして有用であると判断した機能をまとめた便利ソフトになります。このソフトの1つとして任意のショートカットを置き換えることができます。この機能を使用することでEmacsのショートカットをSubimeのショートカットに変換することで対策しました。
Emacs→Subimeの設定は以下の記事を参考にさせていただきました。ありがとううございます。
注意事項
Keybord Managerはソフトごとに使うショートカットを割り当てられます。今回は、Arcというブラウザのみで機能するようにarcと設定しています。
Keybord Managerは非常に優秀なので干渉しているショートカットを無効化してKeybord Managerで設定したショートカットが優先されるようになっています。そのため、ソフトごとの設定をしていないと、他のソフトやOS標準のショートカットと干渉することで一部機能が使えなくなるなど問題が生じることがあります。
まとめ
- HackMDのEmacsキーバインドとブラウザ標準のショートカットが干渉してしまう
- ブラウザ拡張によるショートカットの無効化は意味がない
- PowerToysのKeybord Managerでソフトごとにショートカットを置き換えることで対策できる