Google Suggestにキーボードショートカットを付けるのがおもしろかったので作り直した

こちらのスクリプトがなかなかおもしろかったのだが、残念ながら自分の環境では変なことになってしまったので、作り直した。

サジェストの前にこんなふうに番号が付いて、Ctrl+数字を押すと、その数字のところの検索語 (句) が入力される。

実は今までGoogle Suggestはほとんど使ったことがなかったのだけど、これを作ってるうちになかなかいけると思えてきた。しばらく使ってみるかも。


googlesuggest-shortcut.user.js (横着したので.user.jsとしないとうまく動かない)

Opera 9.52で動作確認。

CSS:nth-of-type()を使っているので、Opera 9.2xとかFirefoxだと3.0だと (0) じゃなくて (10) になってしまうけど、0を押せばOK。(それ以前にOpera 9.2x系やFirefox 3.0で動くのか試してないけど)

// ==UserScript==
// @name Google Suggest Shortcut
// @author edvakf
// @thanks to hiru926
// @include http://www.google.co.jp/
// @include http://www.google.com/
// ==/UserScript==

(function(){
  //スタイルの追加
  //counterで(1)から(10)まで番号を振り、nth-of-typeで(10)を(0)に変える
  var style = '.gac_m{counter-reset:s;}.gac_c::before{color:#F88;content:"("counter(s)") ";counter-increment:s;}';
  style += 'table.gac_m tr:nth-of-type(10) td.gac_c::before{color:#F88;content:"(0) ";}';
  var e = document.createElement('style');
  e.type = 'text/css';
  e.innerHTML = style;
  document.getElementsByTagName('head')[0].appendChild(e);

  //検索欄を取得
  var inputs = document.getElementsByTagName('input');
  for (var i = 0; i < inputs.length; i++) {
    //input title="Google Search" か title="Google 検索"
    if (inputs[i].getAttribute('title')) {
      var searchbox = inputs[i];
    }
  }

  document.addEventListener('keypress',function(event) {
    //サジェストが出ているときのみ実行
    var suggest = document.getElementsByClassName('gac_m')[0];
    if (suggest && suggest.getAttribute('style').match(/visible/)) {
      //keycode 48は'0', 58は'9'
      if (48 <= event.keyCode && event.keyCode <= 58) {
        if (event.ctrlKey) {
          //ctrl+数字が押されたら検索欄のvalueを変える
          event.preventDefault();
          var j = event.keyCode - 49;
          if (j < 0) {
            j = 9;
          }
          searchbox.value = suggest.getElementsByClassName('gac_c')[j].innerHTML;
        }
      }
    }
  },false);
})();