keyconfigを使ったショートカット

以前、ブックマークしているページをショートカットで起動する - @luke_silvia.diaryで、firefoxでショートカットを使ってブックマークページを開くということを行ったのですが、keyconfigを使ったほうが便利でした。

keyconfigとは

これは、firefoxのアドオンで、自分でショートカットキーをカスタムできるようにするものです。ショートカットに大して、javascriptコードを割り当てられるので、そのページのタイトルとURLをタグ形式でクリップボードに保存するとかできます。

install

公式版keyconfigは2.0.0.3くらまでしか対応していないらしいので、下記URLのミラーサイトから非公式版をinstallします。特に問題なく動作します。
keyconfig 20060828 - Add-ons Mirror

設定

例として、Googleをショートカットで開くようにします。

  • 1.ブックマークキーワードの登録

最初に、ブックマークしているページをショートカットで起動する - @luke_silvia.diaryで説明している方法で、Googleのブックマークのキーワードとして「g」を登録しておきます。

  • 2.keyconfigの設定

「ツール」→「キーボードショートカットのカスタマイズ」を開きます。
「新しいキーを追加する」を選択し、名前の部分に、「shortcut_for_google」と好みの名前を付けます。
最後に、/* CODE */の部分に、javascriptコードを記述します。コードは次の通りです。

if(window.loadURI) loadURI(getShortcutOrURI('g',{}));


getShortcutOrURIは、キーワードを受け取って、そのキーワードに割り当てられたURLを返す。そして、それをloadURIに渡している。loadURIは、現在のwindowでそのURLのページを開く。
尚、loadURIは、mozilaが提供しているインターフェースで実装されているものなので、if(window.loadURI)で、windowオブジェクトがloadURIメソッドを持つかを確認している。


javascriptがよく分からないので、この辺の理解がまだ曖昧です(>_<) if(〜)の説明はあっているのだろうか。

  • 3.ショートカットを割り当てる

最後に、今作成したキーにショートカットを割り当てます。今回は、Alt+gとします。ボックスの中で「Alt+g」を打ち、適応を押し、「OK」を押します。これで完了です。

タブで開きたい

上の方法ですと、ショートカットでページを開けるのですが、現在のタブで開いてしまいます。これを新しいタブで開くように変更します。変更箇所は、javascriptの部分です。以下のように変更します。

if(window.openNewTabWith) openNewTabWith(getShortcutOrURI('g',{}));


コードを変更したら「適応」を押し、firefoxを再起動します。これで、新しいタブでブックマークページが開けるようになります。

新しく開いたタブにフォーカスするようにしたい

まだ問題がありました(ノд`)上のコードですと、新しいタブで開くのですが、フォーカスは現在のタブのままなのです。タブで開いた上、そのタブをフォーカスして欲しいものです。
というわけで、そんなメソッドを探すため「GoogleCodeSearch」に聞く!delayedOpenTabというメソッドがあった。これでいけました。

if(window.delayedOpenTab) delayedOpenTab(getShortcutOrURI('g',{}));

追記

なんか、この手のエントリーは超既出だった(涙)しかも、さらにいいものがやっぱりある。
keyconfigのショートカットで同一URLを重複して開かないようにしておくと便利 - Enjoy*Study

ソースは結局こうなった。

var url = getShortcutOrURI('g',{});
var target = null;

var tabs = gBrowser.tabContainer.childNodes;

for (var i = 0, len = tabs.length; i < len; i++) {
  if (tabs[i].linkedBrowser.currentURI.spec == url) {
    target = tabs[i];
    break;
  }
}

if (target == null) {
  target = gBrowser.addTab(url);
}
gBrowser.selectedTab = target;