錯誤試行

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

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);
    

参照サイト

*1:単に特定のサイトでTridactylキーバインドを完全に無効にしたいなら「:blacklistadd example.com」のようにすればよい