錯誤試行

PCや生活の試行錯誤の成果を報告するブログ

Firefox Quantumでカスタマイズできないデフォルトショートカットキーを変更する

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?
Chrome won't let extensions like Vimium interfere with certain application-level key bindings.
(翻訳)
なぜLinuxWindowsでCtrl-Nのようなキーをリマップできないのですか?
ChromeはVimiumのような拡張機能を、特定のアプリケーションレベルのキーバインディングに干渉させません。

FAQ · philc/vimium Wiki · GitHub

これは使いものにならない…。

ということで、いたしかたなく今日までFirefox ESRとVimperatorを使い続けてきたが、今回デフォルトのキーバインドであるCtrl-Nを次のタブへの移動に置き換えることができたため、めでたくFirefox Quantumへ乗り換えする目処がついた。と言ってもFirefox本体ファイルの書き換えというその場しのぎの方法になってしまうのだが、大きな進歩ということで以下に残しておく。



目次


omni.jaを編集する

(追記:Firefox100.0でも有効であることを確認済。ただし編集する行が少し動いている。同じ記述の箇所を編集すればよい)

Firefoxのバージョンは76.0.1でUbuntu16.04にて使用している。
編集するのは/usr/lib/firefox/browser/omni.jaだが、このファイルはzipアーカイブになっておりこの中のファイルを編集する。
omni.jaはunzipで展開せずにNautilusなどのファイラーから書庫管理ソフト(「アーカイブマネージャー」)で開く(後述)。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 を参考に修正箇所を改変)

command="cmd_newNavigator"の変更について

command=""ではなく、command="Browser:NextTab"(次のタブへ移動)のようにしてもよいが、その場合「新しいタブ」で開いたページや設定画面でもキーバインドが有効のままになって便利なものの、複数行フォームでの入力時にカーソルを上から下に移動する際にCtrl-Nで下に移動しようとすると次のタブへ移動してしまって、これはこれで意図通りに動作しないため煩わしい。
アドオンのVimiumを使う際も同様に、「b」や「o」の単押しでブックマークおよび履歴をインクリメンタルサーチして選択する際、意図しない動作になり煩わしい。逆にアドオンによるキーカスタマイズでは新しいタブや設定画面ではキーバインドが無効になるため、どちらを取るか、ということになる。

また、新しいタブや設定タブなどで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が快適に使えるようになった。
ただ、ここまでやってきて何なのだが、別に「J」や「K」でタブ移動してもいいような気がしてきた。Ctrl-Nよりホームから指を動かさなくてよいから楽だし。

omni.jaについての補足

omni.jaは展開せずに中のファイルを編集すること

先にomni.jaはunzipで展開せずにNautilusなどのファイラーから書庫管理ソフト(「アーカイブマネージャー」)で開く旨を記載したが、その理由は、omni.jaをunzipで展開して中身を編集した後に、zipコマンドで圧縮して元の位置に戻してもfirefoxが起動しないため。
unzipでの展開後、全くアーカイブの中身を変えずにzipで圧縮の上、元の位置に戻してもfirefoxは起動しないので、おそらく圧縮形式の違いが原因と思われる(zipコマンドで圧縮すると元のファイルサイズより太ってしまう)。このためzipアーカイブのまま編集する必要がある。

omni.jaの編集が反映されるタイミングについて

about:profilesを開いて「アドオンを無効にして再起動」を選び、開いたセーフモード起動のウィンドウを閉じて起動し直すとomni.jaの編集内容が反映された。
または、~/.mozilla/firefox/(プロファイル名) 以下のjsonファイルを全て移動ないし削除してもomni.jaの変更が反映された。
設定で参照したサイトの説明によると、omni.jaの設定を反映させるにはキャッシュフォルダを消せばよいらしい。その方法はリンク先を参照。

キー定義ファイル(browserSets.ftl)について

omni.ja内の「localization/en-US/browser/browserSets.ftl」でキー定義がされている。ここに記述されているキー定義を変えて~/.mozilla/firefox/(プロファイル名) 以下のjsonファイルを全消しして再起動すると変更が反映される。設定すれば、「Ctrl-X」で新しいウィンドウを開くといったことができた。

参照サイト

*1:なお、ChromeのVimiumではCtrl-Nで次のタブがバインドできている