技術memo

関数型ゴースト

FireFox + KeySnail でEmacsキーバインドなWebブラウジング環境を作った話

昨年末からEmacsを使い始めて以来5ヶ月ほど、すっかり洗脳完了し、今ではEmacsキーバインドがなければ生きていけない状態になっています。 普段Webブラウジングに使っていたGoogle Chromeでは良い方法がなさそうだったのですが、FireFoxのKeySnailという拡張が非常に優秀とのことだったので、この機会にお試し&移行してみることにしました。

バージョン

KeySnail

KeySnail用プラグイン

HoK

  • eで各種リンク上にショートカットを表示, 表示されたショートカットを入力するとリンク先に飛べます

Tanything

  • aでタブ一覧を表示し、更に絞り込み検索が可能です

bmany

  • :bでブックマーク一覧を表示し、更に絞り込み検索が可能
  • :bのショートカットが:に衝突しているので、:の方はキー設定から削除しておきます

KeySnailの各種キー設定

  • Vim系のctrlやaltキー無しのキーバインドを削除します
    • 誤爆防止のため
    • 「戻る」「進む」「更新」だけは適当な割り当てが思いつかないのでそのまま残します
    • Tanythingとbmanyのキーバインドは当然残します
  • C-x nを「ウィンドウを開く」から「タブを開く」に変更します
    • 「ウィンドウを開く」はC-x Nに退避します。
  • C-q b, C-q f で「ひとつ左/右のタブへ」
    • EmacsC-qに幾つか適当なユーザーコマンドを割り当てているので……
      • この辺りは好みに合わせてどうぞ
    • C-qはデフォルトだと「特殊キー」の「エスケープキー」に割り当てられているので、それを適当に別のものに割り当てて逃しておきます
  • C-_がアンドゥになっているので、C-/に変更します
    • これももしかしたら好みの問題かもしれません
  • C-q cで「ページタイトルとURLをコピー」
    • 独自コマンドが欲しくなっても、既存の奴の切り貼りでできる程度なら簡単です*1
function (ev, arg) {
    let text = "[" + content.document.title + "](" + content.location.href + ")";
    command.setClipboardText(text);
    command.pushKillRing(text);
}
  • C-jで改行(Editモード)
function (ev) {
    command.openLine(ev);
    command.nextLine(ev);
}

参考

HoKの精度にもよりますが、ほとんどの場面でキーボード操作でブラウジングできるようになり、非常に快適です。*2 素晴らしいですね。

追記

  • [2015-4-3] 「ページタイトルとURLをコピー」のコマンドを修正。setClipboardTextだけではキルリングに追加されてくれなかったため。
  • [2015-9-17] C-jで改行の設定を追加

*1:それGleasemonkeyでできるよ、とか言わない

*2:多分aタグやボタン類を抽出してるっぽい挙動なので、画像になってるところをクリックとかはダメっぽいです。Twitter Webの一番上の鳥マークとか。