SleipnirからFirefoxへの移行記

カスタマイズ性に優れたFirefoxの魅力にとりつかれたのと、Linuxデスクトップを使い始めたという理由で、SleipnirからFirefoxへの移行を果たした。
完全には似せられなかったけど概ね満足できたので、同じように移行を検討している人のためにもメモっておくことにする。
なお、Sleipnir自体もまた柔軟性が高く、あくまで自分にとっての使用感を再現することを目的としているのでその点はご留意いただきたい。
どんな機能をどうやって実現したかという感じで書いておくので、必要な部分をピックアップしてもらえればよいかと。


操作性に関してはわりとわがままなので長くなってしまったが、どうぞ。

必須の機能/動作


userChrome.jsとkeyconfigで対応した。
keyconfigはバージョンチェックに引っかかったのでinstall.rdfを書き換えて無理矢理入れた。今のところ問題は起きていない。
userChrome.jsの方はcopy-url-lite-y1.uc.jsとしてまとめた。コンテキストメニューに出てくる。

keyconfigはこんな感じに。

Components.classes["@mozilla.org/widget/clipboardhelper;1"]
    .getService(Components.interfaces.nsIClipboardHelper)
        .copyString(window._content.document.location.href);

copyString()の中を適当にいじってバリエーションを作る。

  • 最近閉じたページを開く(Ctrl+L、Ctrl+Shift+Z)
    • 連続して次々復元できること
    • ヒストリも復元


Tab Mix Plusで可能。
ショートカットはもしかしたらkeyconfigで変更したかも。

  • URLの含まれるテキストをペーストするとタブで開く(Ctrl+Shift+V)
    • 複数のURLが含まれていたらまとめて開く
    • 関係ないテキストが含まれていてもURLのみ抽出して開く
    • ttp://みたいなURLも開く


Paste and Go 2で普通のURLは可能。
複数URLやttp://は無理。

  • タブの位置をドラッグで入れ替える
  • フォームの入力内容を記憶しないようにする
  • アドレスバーの入力内容を記憶する
  • 検索バーの入力内容を記憶する


普通にできた。


Greasemonkeyで可能。

  • 特定のURLに対して独自のCSSを適用


Stylishで可能。


ショートカットだけでよかったので、keyconfigで対応。

if (document.commandDispatcher.focusedWindow.getSelection())
    BrowserSearch.loadSearch(document.commandDispatcher
        .focusedWindow.getSelection().toString(), true);

  • 選択範囲をURLとしてタブを開く(Ctrl+J)


Text Linkで可能。ショートカットは割り当ててない。

  • 選択範囲に含まれるリンクをすべて開く(Ctrl+G)


Linkyで可能。ショートカットは割り当ててない。

  • リンクを新規タブで開く
    • 中クリックおよびShift+左クリックでできるとよい


中クリックはTab Mix Plusで割り当て可能。
Shift+左クリックにする設定は不明だが、Ctrl+左クリックで同じ動作になる。

  • アドレスバーは同じタブで開く
  • アドレスバーから新規タブで開く方法もある(Shift+Enterとか)


Tab Mix Plusでカスタマイズ可能。
新規タブはAlt+Enter

  • アドレスバーでリストから選択しただけでは開かない


マウスだと選択した瞬間にアクセスしてしまうが、キーボードなら左右で回避できそう。

  • ブックマークは新規タブで開く
  • ツールバー上のブックマークも新規タブで開く
  • タブを多段表示する


Tab Mix Plusで可能。

  • 検索バーでリストから選択しただけでは開かない
  • ブックーマークをツールバーに配置(リンクバー)
  • ツールバー上のブックマークも階層化可能


Firefoxのデフォルトっぽい。

  • アドレスバーへフォーカスを移すショートカット(Alt+D)


標準でAlt+DとCtrl+Lに割り当てられている。

  • 検索バーにフォーカスを移すショートカット(Alt+S)


標準でCtrl+Kに割り当てられている。
メニューのアクセラレータとかぶってるので変更は諦めた。

  • ページ内検索バーにフォーカスを移すショートカット(Ctrl+F)


標準でCtrl+Fに割り当てられている。

  • 起動時に前回の終了状態を復元する
    • 各タブのヒストリも復元


Firefox標準のセッション機能でも可能だが、復元時にページを再読み込みしてくれない。
Tab Mix Plus独自のセッション機能を使用すると再読み込みも可能になる。

  • 次のタブを表示するショートカット(F3、Ctrl+PageDown、Ctrl+Tab)
  • 前のタブを表示するショートカット(F2、Ctrl+PageUp、Ctrl+Shift+Tab)
  • 次へ進むショートカット(Alt+Right)
  • 前へ戻るショートカット(Alt+Left)
  • タブを閉じるショートカット(Ctrl+W、Ctrl+F4)


F3とF2以外は標準でそうなってたかも。F3とF2はまぁいいや。

  • 各種メニューを編集(不要な項目を消したり、機能を追加したり)


Menu Editorで可能だが、userChrome.cssで消した。

  • UserAgentの変更


about:configで変更できる。
Configuration Maniaで変更可能。
頻繁に切り替える場合はUser Agent Switcherなどがよさそう。

  • ページをスクロールも含めてキャプチャ


Pearl Crescent Page Saverで可能。
キャプチャーイット!ツールバーとかでもいいかも。

  • キーカスタマイズ


keyconfigで可能。

  • マウスゼスチャ
    • 下右で閉じる
    • 上左で上の階層を開く
    • 上下でリロード
    • 左ボタン→右ボタンで次へ進む
    • 右ボタン→左ボタンで前へ戻る


All-in-One Gesturesで可能。
しかし現在はuserChrome.js軽量マウスジェスチャに乗り換えた。

上の階層はスクリプトを追加して対応した。

    // ひとつ上の階層のURLを取得する
    // http://d.hatena.ne.jp/iNo/searchdiary?word=*%5BuserChrome.js%5D
    _action_getParentURL: function(url)
    {
        var matches, origUrl = url;
        matches = url.match(/(^.*\/)(.*)/);
        if(!matches) {
            return null;
        }
        url = matches[1];
        if(url != origUrl && !/(index|main)\.(php3?|html?)/i.test(url)) {
            return url;
        }
        matches = url.match(/^([^\/]*?:\/\/.*\/)[^\/]+?\//);
        if(matches) {
            return matches[1];
        }
        matches = url.match(/([^:]*:\/\/)?(.*)/);
        var protocol = matches[1], domain = matches[2];
        matches = domain.match(/^[^\.]*\.(.*)/);
        if(matches) {
            return (protocol + matches[1]);
        }
        return null;
    },
        var parentUrl = ucjsMouseGestures._action_getParentURL(_content.document.location.href);
        if (parentUrl != null) loadURI(parentUrl);

  • IrvineへすべてのURLを送る
  • Irvineでダウンロード

  • YouTubeなどのビデオのダウンロード
  • ページ内のFlashのダウンロード


Download EmbeddedFast Video Downloadで対応可能。
片方だけでは不足な感じがしたので併用。


userChrome.js用に自作した。get_nicovideo.uc.js
コメントもダウンロードできる。
同種のスクリプトやエクステンションはいっぱいある。

欲しいけど無ければ我慢できるかもしれない機能/動作

  • タスクトレイに入れる


MinimizeToTrayで可能だが、特に必要ではない気がしてきたので入れていない。

  • 新規タブは一番右に開く
  • タブを閉じたら右隣をアクティブにする
  • タブを左ダブルクリックでリロード
  • ナビゲーションロック(ページ遷移を禁止して、強制的に新規タブで処理する)


Tab Mix Plusで可能。


標準機能。

  • 検索バーで「g キーワード」ならGoogle、「y キーワード」ならYahoo!みたいに検索エンジンを指定して検索する機能


検索バーではないがアドレスバーなら標準で備わっている。ブックマークのクイックサーチというところに入っているやつがそう。
ブックマークのキーワード欄に「nico」とか設定して検索URLをブックマークしておけば「nico 文字列」で検索できる。


Tab Mix Plusである程度可能。タブを右クリックした際の「機能の許可」で可能。
またNoScriptドメイン毎にJavaScriptの許可が設定できる。

  • ポップアップブロック、広告ブロック
    • ウィンドウサイズやURL正規表現で設定できること


単純なものなら標準搭載。
複雑なものは別途探すか、AdBlockのようなものを入れればよい。とりあえず今のところ困ってないので何も入れてない。

  • ブックマークのフォルダ内をまとめて開く


標準機能。

  • ブックマークをひとまとめにした機能(お気に入りグループ)


ないけど、フォルダまとめて開ければいい気もする。

  • 上の階層へ移動するボタンまたはショートカット(Alt+Up)


そういうエクステンションがあったけど、userChrome.jsのGoUp.uc.jsコンテキストメニューに追加して我慢。

  • 外部プログラムでソースを開く


Web Developerを入れたらそんな機能がついてた。
それだけを実現してくれるエクステンションもあると思う。

  • マウスホイールでタブを切り替える
    • 右クリック+ホイールで前後に切り替えられるとよい


All-in-One Gestures、軽量マウスジェスチャで可能。軽量マウスジェスチャのほうがSleipnirの動作と同じでよい感じ。
あとTab Mix Plusを入れるとタブバー上のホイールで切り替えられる。

  • ページ内の検索でキーワードハイライト


標準機能。

  • 名前をつけて保存するショートカット(Ctrl+S)


標準機能。

  • MHTかそれに類する手段で1ファイルに保存する機能


mafというエクステンションがあるようだが、2.0では動かない。


一発でできるものはないがLinkyの一覧ダイアログでクリップボードにコピーできる。


なさそう。

無くてもいいけど使いたくなるかもしれない機能/動作

  • 開いてるタブのサムネイル一覧


Tab Catalogで可能。

  • ダイアログの抑制


なさそうだけど、そもそもActiveX関係の確認ダイアログがうざいのを抑制していただけなので必要ないかも。

  • タブの自動更新
    • 秒数を指定できること


Tab Mix Plusで可能。

  • コメントを表示


Web Developerで可能。

  • 選択部分のソースを表示


標準かわからないけど、気がついたらできた。

  • 選択文字列を翻訳サービス系のサイトで開く
    • サイトの切り替えとか色々設定できるとよい


右クリックから開くわけではないけど翻訳パネルというのが便利でこっちにした。

  • 現在のページをGoogleキャッシュで開く
  • 現在のページをInternet Archive(web.archive.org)で開く


そういうエクステンションがあったけど、userChrome.js用に自作した。
view-cache.uc.js

  • 全画面表示(F11)


標準機能。キーも同じ。