Firefox Quantumでカスタマイズできないデフォルトショートカットキーを変更する
(2024/02/23)「omni.jaを編集する(zip使用)」を追記
FirefoxがQuantumになりキーカスタマイズアドオンのVimperatorが使えなくなってから久しい。
Vimperatorが開発終了となった当時、Chromeで同じく愛用していたキーカスタマイズアドオンのVimiumをFirefoxでも使ってQuantumに乗り換えるつもりでいたが、Vimiumでキーのリマップ設定をしてみたところ、Ctrl-Fで「ScrollDown」や、Ctrl-Pで「前のタブへ移動」など概ね問題なく設定できるのだが、「次のタブへの移動」に設定したCtrl-Nを押したところ、何かの呪いのように新しいウィンドウが開いてしまった。
以下に引用したVimiumの公式GitHubページのFAQによると、呪わしいことに、特定の(Ctrl-Nのような)Firefoxデフォルトのキーバインドは、拡張機能から書き換えることができないとのこと(Macだけはバインド可能らしい)*1。
Why can't I remap Ctrl-N and similar keys on Linux and Windows?
FAQ · philc/vimium Wiki · GitHub
Chrome won't let extensions like Vimium interfere with certain application-level key bindings.
(翻訳)
なぜLinuxやWindowsでCtrl-Nのようなキーをリマップできないのですか?
ChromeはVimiumのような拡張機能を、特定のアプリケーションレベルのキーバインディングに干渉させません。
これは使いものにならない…。
ということで、いたしかたなく今日までFirefox ESRとVimperatorを使い続けてきたが、今回デフォルトのキーバインドであるCtrl-Nを次のタブへの移動に置き換えることができたため、めでたくFirefox Quantumへ乗り換えする目処がついた。と言ってもFirefox本体ファイルの書き換えという姑息な(その場しのぎの)方法になってしまうのだが、大きな進歩ということで以下に残しておく。
目次
omni.jaを編集する
(追記:Firefox123.0でも有効であることを確認済。ただし編集する行が少し動いている。同じ記述の箇所を編集すればよい)
Firefoxのバージョンは76.0.1でUbuntu16.04にて使用している。
編集するのは/usr/lib/firefox/browser/omni.jaだが、このファイルはzipアーカイブになっておりこの中のファイルを編集する。
omni.jaはunzipで展開せずにNautilusなどのファイラーから書庫管理ソフト(「アーカイブマネージャー」)で開く。
→Firefox121.0ぐらいからNautilusでomni.jaが書庫扱いされなくなってしまったのでzipで展開・圧縮することとした。omni.jaを編集する(zip使用)を参照。
chrome→browser→content→browserと開いていった下のbrowser.xhtmlが目的のファイルとなる。
今回は、Ctrl-Nで新しいウィンドウが開くのを無効にして、かつアドオンからCtrl-Nの書き換えができるようにしたいので、以下のように編集する(マイナスの行を削除、プラスの行を追加)。後は、VimiumでCtrl-NをnextTabに設定すればよい。
browser.xhtml 276行目~
<keyset id="mainKeyset"> <key id="key_newNavigator" data-l10n-id="window-new-shortcut" - command="cmd_newNavigator" + command="" - modifiers="accel" reserved="true"/> + modifiers="accel" reserved="false"/>
(GitHub - nilcons/firefox-hacks: How to make Firefox usable を参考に修正箇所を改変)
(OSをEmacsキーバインドにしていない場合は、この項目は読み飛ばしてOK)
「command="cmd_newNavigator"」の変更と、OSやアドオンによるEmacsキーバインド設定の衝突について
(ここをクリック・タップして開く)
command=""ではなく、command="Browser:NextTab"(次のタブへ移動)のようにしてもよいが、その場合「新しいタブ」で開いたページや設定画面でもキーバインドが有効のままになって便利なものの、OSレベルでEmacsキーバインドになっている場合(具体的にはUbuntuのgconf-editorコマンドで/desktop/gnome/interface/gtk_key_themeをEmacsにしている場合。以下同じ)に、複数行フォームでの入力時にカーソルを上から下に移動するつもりでCtrl-Nを押すと次のタブへ移動してしまって意図通りに動作しないため煩わしい。
また、キーカスタマイズアドオンのVimiumを使う際も同様に、「b」や「o」の単押しでVomnibarを開いてブックマークおよび履歴をインクリメンタルサーチの上、表示されたドロップダウンから項目を選択しようとしてCtrl-Nを押すと次のタブへ移動してしまい、これも意図しない動作になって煩わしい。
キーカスタマイズはアドオンだけにして、Firefox本体ファイルには手を加えないことにすると、OSレベルでEmacsキーバインドにしている場合の複数行フォームやVomnibarはCtrl-N・Ctrl-Pで上下移動できるが、新しいタブや設定画面ではキーバインドが無効になり、何よりCtrl-Nで次のタブに移動できなくなる。あちらを立てればこちらが立たずなので、どちらを取るかの選択となる。
また、新しいタブや設定タブなどでCtrl-Pを押すと印刷ダイアログが開いてしまうのも封殺しておきたい。
300行目
- <key id="printKb" data-l10n-id="print-shortcut" command="cmd_print" modifiers="accel"/> + <key id="printKb" data-l10n-id="print-shortcut" command="" modifiers="accel"/>
最後に、アドレスバーからabout:profilesを開いて「アドオンを無効にして再起動」を選び、開いたセーフモード起動のウィンドウを閉じて起動し直すと設定が反映される。
以上でだいぶFirefox Quantumが快適に使えるようになった。
ただ、ここまでやってきて何なのだが、別にVimiumデフォルトのキーバインドである「J」や「K」でタブ移動してもいいような気がしてきた。Ctrl-N・Ctrl-Pよりさらにホームポジションから指を動かさなくてよいから楽だし(セミコロンをワンショットモディファイヤでShift化していれば右手だけでタブ移動できてしまう)。しかし、やはり手に馴染んでいるのはCtrl-N・Ctrl-Pの方なので設定は必要といえる。
omni.jaについての補足
omni.jaは展開せずに中のファイルを編集すること
Firefox121.0ぐらいからNautilusでomni.jaが書庫扱いされなくなってしまったのでzipで展開・圧縮することとした。後述のomni.jaを編集する(zip使用)を参照。
unzipでの展開後、全くアーカイブの中身を変えずにzipで圧縮の上、元の位置に戻してもfirefoxは起動しないので、おそらく圧縮形式の違いが原因と思われる(zipコマンドで圧縮すると元のファイルサイズより太ってしまう)。このためzipアーカイブのまま編集する必要がある。
omni.jaを編集する(zip使用)
Firefox121.0ぐらいから、Nautilusでomni.jaが書庫扱いされなくなってしまったのでその対応について。
omni.jaをomni.ja.zipにリネームしてunzipで展開する。中身のファイルを編集するのは同じ。ファイル編集後、展開したディレクトリをzipで圧縮してomni.jaとして配置してもFirefoxは起動しない。再圧縮したomni.jaを確認するとオリジナルよりもファイルサイズが小さくなってしまっているようなので、圧縮率が悪い動画・音声ファイルなど(今回は30MB程度のmp3を使用)をomni.jaを展開したディレクトリ内に入れた上で作成したzipファイルをomni.jaとして配置してやるとFirefoxが正常に起動した。
おそらく起動時にファイルサイズをチェックしているのではないかと思われる。
(追記:2024/4/1)Firefox124.0.1に更新したところ、この「嵩増し」は不要になっていた。omni.jaを展開してbrowser.xhtmlを編集してzipで圧縮、omni.jaとして配置するだけで起動した。
参照サイト
- FAQ · philc/vimium Wiki · GitHub
Vimiumの公式GitHubページのFAQ。下の方に「LinuxとWindowsでCtrl-Nをリマップできないのはなぜ?」の質問がある。
- Firefox Quantumでキーバインド(キーボードショートカット)を変更する - QA Stack
海外のQAサイトが機械翻訳されたと思しきサイト。
編集するファイルはbrowser.xulとなっているが、Firefoxバージョンは76.0.1ではこれに相当するファイルはbrowser.xhtmlになっていた。また、このファイルの内容はキーバインドが記載されていないため(「Ctrl-N」といった記載がない)、どの項目がどのキーなのが全く当たりが付けられなかったが、回答内のリンク(https://github.com/nilcons/firefox-hacks)先の内容がヒントになった。
- GitHub - nilcons/firefox-hacks: How to make Firefox usable
このエントリの元ネタ。上記QAサイトの回答からリンクされていた、Firefox Quantumのカスタマイズを解説したGithubページ。omni.ja内のbrowser.xhtmlの編集方法についてなど。このページの記述によるとbrowser.xhtmlを編集後、普通にzipで再度圧縮している。オプションには変わったものは無さそうだが…。
- xkeysnail - もうひとつの Linux 向けキーリマッパ #Python - Qiita
Windows版の本家窓使いの憂鬱のような、アプリケーションごとのキーバインドの設定がLinuxでもできる! 試したところFirefoxでキーバインドを変更できて非常に快適になった。Firefox本体ファイルの書き換えをするのではなく、こうしたアプリを使うのが本来だろう。ただ、フォーム内にカーソルがあってもCtrl-Nによってタブ移動が発生してしまう問題は、Firefox本体ファイルを書き換える方法と同様に解決できない。
- Shortkeys (Custom Keyboard Shortcuts) for Firefox – 🦊 Firefox (ja) 向け拡張機能を入手
Shortkeysというアドオン。バージョン3.0.4を試してみたところ、Ctrl-fやCtrl-pは上書きできたが、Ctrl-nについては上書きすることも「Do Nothing(disable browser shortcut)」を設定してショートカットキーとしての機能を無効にすることもできなかった。
- https://www.it-swarm.dev/ja/firefox/firefox%E3%81%A7%E3%82%AD%E3%83%BC%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/959761886/
2012年のエントリ。アドオンの有効/無効を切り替えるとomni.jaを読みにいく、とのこと。/usr/lib/firefox/omni.jaをリロードするには、アドオンを無効/有効にする必要があります。
- 2018年、Vimperatorを卒業する - alpicolaのブログ
VimperatorのWebExtension版オルタナティブである「Tridactyl」をフォークしてC-[、C-n、C-pのようなキーバインドが使えるように変更したとのこと(mac用)。WebExtensionでデフォルトキーバインドの変更ができない旨の言及がある。WebExtensionではFirefoxの組み込みのショートカットの上書きが必ずしも許されていない、すなわち新たに動作を定義しようとしても、元々の動作を抑制することができないというのが最大の障壁のようだった。
*1:なお、ChromeのVimiumではCtrl-Nで次のタブがバインドできている