FirefoxでWASDスタイル

FirefoxChrome、以前はOperaもだけど、ブラウザのキーショートカットは「WASD」にしている。

いわゆるFPSスタイルで、使用キャラをホームポジションのWASDキー上に添えた左手だけで動かすもの。右手はマウスを扱い、精密な動作、照準合わせなどを行う。

具体的には、W:前進、S:後退、A:左に平行移動、D:右に平行移動

このWASD配置をブラウザに適用し、左手をWASDを中心にしたキーを扱い、右手はマウスをぐるぐる。

インターネットはプログラマの世界なので、viのhjklコマンドが遍く広まっているようで、TumblrやTwitterGoogleでもjkでエントリの上下移動がデフォ設定されているけど、自分にはWASDスタイルがあっていた。

WASD+マウスの利点は、片手でブラウザを扱えることだと思う。

両手をキーボードに添えてモニタを注視しなくても構わないので、机の前に座る姿勢が楽になる。マウスを使わず左手だけでブラウザを扱えるし、逆にキーを使いたくない時は、右手のマウスジェスチャが利用できる。

WASDキーを中心とした場合、Shift、Ctrl、Altキーも全て、左手から届くことになる。

例えばブラウザの戻るはデフォルトでは「BackSpace」だけども、これは左手側とは反対にあって遠い。これでは動作が大きくなり困るので、自分は「1」に戻るをセットしている。

Shift、Ctrl、AltとWASDを中心にしたキーを組み合わせれば、ブラウザのほぼ全ての操作が左手だけで扱えるようになる。

キーショートカットの設定はKeySnailを利用している。

  • w 上に2行スクロール
  • s 下に2行スクロール
  • a 左にスクロール
  • d 右にスクロール
  • q 1画面、上にスクロール
  • e 1画面、下にスクロール
  • 1 戻る
  • 2 進む
  • f Hit-a-Hint(KeySnail - HoK
  • Shift+e FastForward
  • Shift+q Follow previous link(FastForwardの戻る版)
  • Shift+f Hit-a-Hint バックグラウンドで開く
  • Shift+g Hit-a-Hint リンクを連続して開く
  • Ctrl+d/Alt+d ロケーションバーにフォーカス/ブラウズ画面へフォーカス
  • Ctrl+s/Alt+s サーチバーにフォーカス/ブラウズ画面へフォーカス
  • Ctrl+q サイドバーを開く/閉じる
  • Ctrl+1 ひとつ左のタブへ移動
  • Ctrl+2 ひとつ右のタブへ移動
  • Ctrl+w 現在のタブを閉じる
  • Ctrl+Shift+w 他のタブをすべて閉じる
  • Ctrl+r 最後に閉じたタブを復元
  • g u 一つ上のディレクトリへ移動
  • r r 最近閉じたタブの履歴を表示(KeySnail - list-closed-tabs
  • h h ページ履歴を表示(KeySnail - History

Operaを利用してた時は、上記に加えて空間ナビゲーション(CrossFire)をShift+W,A,S,Dに設定していた。空間ナビゲーションは、一般にはTABキーで順繰りに移動するだけのフォーカス移動を、視覚的に上下左右に動かせるもので、Opera以外には見かけない機能だったため、Firefoxへの移住を躊躇した理由のひとつだった。(userChromeJSのCrossFireModoki.uc.jsを用いればFirefoxでも使えるようだが自分は入れていない。)

空間ナビゲーションは、もう使ってない。今はHit-a-Hint(HoK)をメインに利用。

Hit-a-Hintは、リンクや要素に文字を割り振り、該当キーを押下することで選択できるようにする機能。このキー設定も自由に書き換えられるので、自分はWASDを中心にしたキーplugins.options["hok.hint_keys"] = "qreadzxc";に設定し、表示は下のようになっている。

f:id:k9q:20130620030503p:plain

FastForwardも、Operaにあった機能で、ページを解析して「次へ」や「Next」と書かれたリンクに自動で移動してくれる機能。これもHoKで利用している。

f:id:k9q:20130620031344p:plain

最近閉じたタブの履歴を表示や、ページ履歴の表示。上は最近閉じたタブの履歴をKeySnaiのプロンプトで表示してるところ。

 

PPxはWASDにしてない。左手周辺だけではキーが足りなかった。

KeySnailの設定

自分が使っているKeySnailの設定の一部。

key.setViewKey('w', function (ev) {
    plugins.scrollet.scrollLines(-5)
}, '2行スクロールアップ', true);

key.setViewKey('s', function (ev) {
    plugins.scrollet.scrollLines(5)
}, '2行スクロールダウン', true);

key.setViewKey('d', function (ev) {
    key.generateKey(ev.originalTarget, KeyEvent.DOM_VK_RIGHT, true);
}, '右へスクロール', true);

key.setViewKey('a', function (ev) {
    key.generateKey(ev.originalTarget, KeyEvent.DOM_VK_LEFT, true);
}, '左へスクロール', true);

key.setViewKey('q', function (ev) {
    goDoCommand("cmd_scrollPageUp");
}, '一画面分スクロールアップ', true);

key.setViewKey('e', function (ev) {
    goDoCommand("cmd_scrollPageDown");
}, '一画面スクロールダウン', true);

key.setViewKey('1', function (ev) {
    BrowserBack();
}, '戻る', true);

key.setViewKey('2', function (ev,arg) {
   if(gBrowser.canGoForward){
      BrowserForward()
   }else{
      ext.exec('hok-follow-next-link', arg, ev);
   }
}, '進む', true);

key.setViewKey('E', function (ev, arg) {
    ext.exec('hok-follow-next-link', arg, ev);
}, 'Follow next link', true);

key.setViewKey('Q', function (ev, arg) {
    ext.exec('hok-follow-prev-link', arg, ev);
}, 'Follow prev link', true);

key.setViewKey('f', function (ev, arg) {
    ext.exec('hok-start-foreground-mode', arg, ev);
}, 'HoK - リンクをフォアグラウンドで開く', true);

key.setViewKey('F', function (ev, arg) {
    ext.exec('hok-start-background-mode', arg, ev);
}, 'HoK - リンクをバックグラウンドで開く', true);

key.setViewKey('G', function (ev, arg) {
    ext.exec('hok-start-continuous-mode', arg, ev);
}, 'HoK - リンクを連続して開く', true);

key.setGlobalKey([['C-d'], ['M-d']], function (ev, arg) {
    var urb = document.getElementById("urlbar");
    if (ev.target === urb) {
        urb.blur();
        gBrowser.focus();
        content.focus();
    } else { ! document.getElementById("urlbar").hidden && urb.focus();
    }
}, 'トグル URLバーのフォーカス');

key.setGlobalKey([['M-s'], ['C-s']], function (ev, arg) {
    var sb = document.getElementById("searchbar");
    if (ev.target === sb) {
        sb.blur();
        gBrowser.focus();
        content.focus();
    } else { ! document.getElementById("searchbar").hidden && sb.focus();
    }
}, 'トグル サーチバーのフォーカス');

key.setGlobalKey('C-q', function (ev) {
    toggleSidebar('viewBookmarksSidebar');
}, 'トグル サイドバー');

key.setGlobalKey('C-2', function (ev) {
    getBrowser().mTabContainer.advanceSelectedTab(1, true);
}, 'ひとつ右のタブへ', true);

key.setGlobalKey('C-1', function (ev) {
    getBrowser().mTabContainer.advanceSelectedTab(-1, true);
}, 'ひとつ左のタブへ', true);

key.setGlobalKey('C-W', function (ev) {
    var browser = getBrowser();
    browser.removeAllTabsBut(browser.mCurrentTab);
}, '他のタブを全て閉じる', true);

key.setGlobalKey('C-r', function (ev) {
    undoCloseTab();
}, '閉じたタブを元に戻す', true);

key.setViewKey(['g', 'u'], function (ev) {
    var uri = getBrowser().currentURI;
    if (uri.path == "/") return;
    var pathList = uri.path.split("/");
    if (!pathList.pop()) pathList.pop();
    loadURI(uri.prePath + pathList.join("/") + "/");
}, '一つ上のディレクトリへ移動');

key.setViewKey(['h', 'h'], function () {
    ext.exec("history-show");
}, '履歴を検索');

key.setViewKey(['r', 'r'], function () {
    ext.exec("list-closed-tabs");
}, '閉じたタブリストを表示', true);