2018年、Vimperatorを卒業する

長らくWebブラウンジングにはVimperatorを使ってきた。従来のXULを使った拡張を廃止し、WebExtensionに一本化されたFirefox 57が昨年リリースされたのに伴い、XUL拡張でWebExtensionへの書き直しも困難なVimperatorはend of lifeが宣言された。それでもまだ長期サポート版であるFirefox ESRがFirefox 52相当なので、こちらでVimperatorを使い続けることができていた。とはいえ、Firefox ESRも2018年中にFirefox 60になるらしい(RapidRelease/Calendar)ので、2018年はいよいよVimperatorからの卒業が迫られている。

Tridactylを使ってみる

Vimperatorからの移行先候補はVimperatorレポジトリのREADMEにまとめられている。その中でも「aims to eventually match the vimperator experience」らしいTridactylというWebExtensionに興味がわいた。Vim風ショートカットやHit-a-Hintだけでなく、exモードがあり、補完候補の表示も限定的ながらできるようだった。Vimperatorをヘビーにカスタマイズしていたわけではなく、もっぱらキーボードだけでタブや履歴をインクリメンタルに検索して開ける操作を気に入って使っていた私にはちょうどよさそうに見える。

実際Tridactylをインストールして使ってみると、だいたい期待通りに動く。ところが、重大な欠点があって、ctrlキーを使ったキーバインド全般に対応していない。タブの切り替えはC-n, C-pでなくgt, gT、補完候補の選択もC-n, C-pではなくTab, S-Tabでなければならない。Escapeキーの代わりにC-[を使うこともできない。これではつらい。この問題は認識されてはいて

How can I bind keys using the control/alt key modifiers (eg: ctrl+^)?
You can't, yet. See issue #41.

https://github.com/cmcaine/tridactyl#frequently-asked-questions

とある。関連issueをいくつか見ていると、WebExtensionではFirefoxの組み込みのショートカットの上書きが必ずしも許されていない、すなわち新たに動作を定義しようとしても、元々の動作を抑制することができないというのが最大の障壁のようだった。

しかしながら、macOSではFirefoxのデフォルトのショートカットはほとんどctrlキーでなくcommandキーを修飾キーとして用いるので、ctrlを使うようなキーバインドを新たに入れたって平気ではなかろうか。というわけで、macOS専用であまりよろしくはないけれど、forkして C-[ や C-n, C-p のようなキーバインドが使えるような変更を入れてみた。ついでに補完のふるまいを少しVimperatorに近づけたりもしている。

github.com

これで私が望んでいる機能はおおよそ実現され、Firefox 57に移行することができた。

ただ上に書いたように、macOS以外の環境ではFirefox組み込みのキーバインドと衝突するほか、それ以外にも元々の挙動を変更している部分があってそのまま本家に取り込んでもらうのは難しそう(ちなみにtridactylの開発者たちはみなmacを使っていないらしい)。どうしたものか。