Tridactylのキーカスタマイズ(モード別に変更など)
FirefoxのキーバインドをVim風に変更するアドオンの「Tridactyl」(Tridactyl – 🦊 Firefox (ja) 向け拡張機能を入手)を使用してみたところ、コマンドラインモードがあり、他のVim風キーバインド変更アドオンよりも、かつて愛用していたVimperatorに近くて使いやすかった。が、キーバインドに少し不満を感じた。
一つは、タブ移動にC-nとC-pが使えないこと。これは以前の記事のFirefox Quantumでカスタマイズできないデフォルトショートカットキーを変更する - 錯誤試行や外部のキーカスタマイズツールで解決できる。
もう一つは、コマンドラインモードの上下移動がTabになっていて操作しづらいこと。これもC-nやC-pで上下移動させたいが、そうすると上記の方法ではタブ移動とキーバインドがバッティングしてしまう。
Tridactylで何とかできないかと思っていたところ、以下の記事が見つかった。
- 「C-n」「C-p」でタブを左右に移動する
以下をコマンドラインモードに入力すればよいが、事前に以前の記事(Firefox Quantumでカスタマイズできないデフォルトショートカットキーを変更する - 錯誤試行)のようにして、omni.ja内のbrowser.xhtmlでC-nとC-pを無効にしておく必要がある。bind --mode=normal <C-n> tabnext_gt bind --mode=normal <C-p> tabprev
- コマンドラインモードで「C-n」「C-p」で一覧を上下移動する
「C-n」については、上と同様の対応が必要。bind --mode=ex <c-n> ex.next_completion bind --mode=ex <c-p> ex.prev_completion
- コマンドラインモードの「C-f」を「カーソルを右へ移動」に割り当てる
「C-f」がデフォルトで「コマンド履歴からの入力補完」に割り当てられていたが、それよりも、現在表示しているページのURLを編集してページ移動(「O」キー)したいというときに、URLの編集をする際に矢印キーでカーソルを右に移動しなければならないのが不便に感じたので、「右へ移動」を割り当てることにする。
unbind --mode=exしてもデフォルトの割り当てが解除されなかったので、以下のように一旦適当なキーで上書きしてやったところ、割り当てが変更された。 bind --mode=ex <C-f> <RightArrow> unbind --mode=ex <C-f>
- Google日本語版サイト(google.co.jp)の検索結果ページでページナビによる移動を有効にする
コマンドラインモードから以下を実行すると「]]」で検索結果の次のページへ、「[[」で前のページへ飛ぶことができる。これは結構便利なので設定をおすすめしたい。
google.comだと動作しないが、google.co.jpなら動作する。set followpagepatterns {"next": "^(next|newer)\\b|»|>>|more|>|次へ", "prev": "^(prev(ious)?|older)\\b|«|<<|<|前へ"}
- 現在のタブを左右へ移動
以下を設定すると現在のタブを「<<」で左へ、「>>」で右へ移動する(参照サイト)。Vimiumにこの機能があって地味に便利だったため設定した。ただし時おり動作しなくなることがある。bind << tabmove -1 bind >> tabmove +1
- ignorekeyの設定(特定のサイトで特定のキーだけをデフォルトのキーバインドにする)
特定のサイトで、Tridactylキーバインドとサイトで用意しているデフォルトのキーバインドを併用したい場合がある*1。こうした場合、Tridactylと同じくvimライクなキーバインドにする拡張機能のVimiumではGUI設定の「Excluded URLs and keys」から特定のサイトで特定のキーをデフォルトキーバインドにする設定ができるが、Tridactylではコマンドラインモードから設定する必要がある(参照サイト)。
Twitterを例に挙げると、Twitterのデフォルトキーバインドは充実しているが、ツイートをクリックやEnterで開いた際に、元のタイムラインに戻るショートカットが設定されておらず、ブラウザデフォルトの「Alt+←(前のページに戻る)」を使うしかないのが不便なので「戻る」キーを設定したい。
「H」キーを「Alt+←(前のページに戻る)」として使うには以下のようにすればよい。autocmd DocStart twitter.com mode ignore bindurl twitter.com --mode=ignore H back
Twitterを開いたら自動でIgnoreモードにして、「H」をbackにバインドしている。
以下を追記すると「F」(大文字)キーを押すと指定したリンクを新しいタブに開く。bindurl twitter.com --mode=ignore F composite hint -b; mode ignore
ヒントモード実行後はノーマルモードに戻ってしまうので、再度Ignoreモードに戻している(「composite」を付けると「;」の後のコマンドを、前のコマンドが終わってから実行してくれる模様)。
ただし、別のタブに移動して戻ってくると通常のTridactylキーバインド(normalモード)に戻ってしまうので「i」を押してignoreモードに変更する必要がある。
- はてなブックマークの各記事のエントリページの「人気コメント」タブと「新着コメント」タブを切り替える
はてなブックマークの各記事のエントリページには「人気コメント」タブと「新着コメント」タブがあるが、ヒントモードからこれらのタブを選択して切り替えることができず不便だった。そこで、コマンドラインモードから以下を実行すると「;f」で選択できるようになった。bind ;f hint -c [class="js-bookmarks-sort-tab"]
(2023/2/4追記)
いつの間にか、「人気コメント」タブ・「新着コメント」タブが何も設定しない通常のヒントモードで選択できるようになっていた。上記のCSS要素の指定によるヒントモードも引き続き使用可能。普通の(リンクをターゲットにした)ヒントモードではアルファベット2文字打ちで決定するが、こちらの設定は「;f」のみで両者をトグルできる点で優れている。
- クイックマークでブックマークレットを実行する(「goo」とタイプしてはてブコメントを見る)
以下をコマンドラインモードで実行すると、「goo」とタイプするだけで、今開いているページの、はてなブックマークの記事エントリページ(コメントページ)を開くことができて大変便利。オススメしたい。quickmark o javascript:location.href='http://b.hatena.ne.jp/entry/'+escape(location.href);
説明すると、「go」はクイックマークで登録したページを開くTridactylのショートカットキーで、クイックマークとは「M」の後に何かキーを押すと、そのキーに現在表示しているページが登録され、「go」+「(登録したキー)」をタイプするとそのページに飛べるというもので、良く開くページを登録しておくと便利な機能。このクイックマークの登録は、コマンドラインモードからもでき、上記はブックマークレットを登録したもの。
- 右手だけではてなブックマークの記事エントリページを開く
以下を実行すると「;o」ではてなブックマークの記事エントリページが開く。本来「;o」は「f」と同じでヒントモードに設定されているが、使わないので置き換えた。結局、すぐまた両手を使わなくてはいけないのだが、少しの間ズボラができる。bind --mode=normal ;o open javascript:location.href='http://b.hatena.ne.jp/entry/'+escape(location.href);
- Google日本語版サイト(google.co.jp)の検索結果ページでページナビによる移動を有効にする
参照サイト
- Tridactyl – 🦊 Firefox (ja) 向け拡張機能を入手
FirefoxアドオンサイトのTridactylのページ
- Tridactyl help page/hint
コマンドラインモードから「:help」でヘルプページを確認できる。「:help hint」のようにすれば「hint」に関するヘルプが表示される。ただしヘルプページは英語なので読むのが大変な場合は、一旦ページを保存した上でFirefoxメニューの「ファイルを開く」から開いて「ウェブページを翻訳」アドオンで翻訳するとよい。
- GitHub - tridactyl/tridactyl: A Vim-like interface for Firefox, inspired by Vimperator/Pentadactyl.
TridactylのGitHubのページ- Binding <C-n> doesn't work · Issue #996 · tridactyl/tridactyl · GitHub
TridactylのGitHubのIssuesでC-nが動かないという報告
- Ignore keybindings functionality · Issue #57 · tridactyl/tridactyl · GitHub
TridactylのGitHubのIssuesでIgnoreキーが欲しいという要望(2017年)へのコメントで、特定のサイトで特定のキーを無効化する方法を訊ねた書き込みへの回答。Tridactylのキーバインドを無視してデフォルトの操作に戻すのがIgnoreモードなのに、そのIgnoreモードでキーのバインド(上書き)ができるという発想が個人的には思い付かなかったが、なるほどという感じ。タイトルのIgnoreキー機能は既にTridactylの機能として追加されているが、このコメントで回答されている「特定のサイトで特定のキーだけをデフォルトキーバインドにする」Ignorekeyの設定方法は、ReadmeやReadmeで案内されている:help bindurlには記載されていなかった。
- Navigating in history is slow · Issue #3772 · tridactyl/tridactyl
コマンドラインモードでのURL履歴の移動が遅いという報告のコメント。tridactylの設定を書き込んでおり、「<<」「>>」によるタブの移動設定が記載されていた。
- Binding <C-n> doesn't work · Issue #996 · tridactyl/tridactyl · GitHub
*1:単に特定のサイトでTridactylキーバインドを完全に無効にしたいなら「:blacklistadd example.com」のようにすればよい