Google Reader をフォルダわけしたいけど、フォルダ単位ではなくフィード単位で読みたい

登録フィード数 483 件。仕事に支障をきたし始めたので優先度付けて読みたいと思い立った。livedoor reader にあるレートと同じかな。
Google Reader でもフォルダ分けができるのだけど、フォルダを選択するとそこに登録されているフィードが日付順に混ざって表示されてしまうのが困る。フォルダ配下にあるフィードを選択して、その後は SPACE で読み進めていけばいいのだけど、フォルダに登録されているフィードを読み切ると次のフォルダに移動する。またそこでマウスでフォルダを選択して・・・という作業が発生する。キーボードショートカットが用意されているので、shift + o 、 shift + o をすれば次のフィードに移ってくれるのだけど非常に使いにくい。

非常に使いにくいので、SPACE で全部済ませたい。こんな感じで。

SPACE キーで少しずつスクロールさせるグリモンを改良して、フォルダがアクティブになった場合は配下にあるアクティブなフィードを選択するようにしてみた。

// ==UserScript==
// @name        Google Reader Scroll Controll
// @namespace   http://d.hatena.ne.jp/spider-man/
// @include     http://www.google.co.jp/reader/*
// @version     0.4
// ==/UserScript==

(function () {
 var SCROLL_HEIGHT = 150;
 window.addEventListener('keypress',
   function(e) {
     if (e.charCode == 32) {
       // folder control
       var subtree = document.getElementById("sub-tree");
       var result  = document.evaluate(".//a[@class='link tree-link-selected cursor']",
                                      subtree ,
                                      null ,
                                      XPathResult.FIRST_ORDERED_NODE_TYPE ,
                                      null);
       var href = result.singleNodeValue;
       if(href.firstChild.getAttribute("class") == "icon icon-d-1") {
            e.preventDefault();
            e.stopPropagation();
            setTimeout(function(){
                var feed  = document.evaluate(".//li[@class='sub unselectable collapsed unread']/a",
                                                href.parentNode ,
                                                null ,
                                                XPathResult.FIRST_ORDERED_NODE_TYPE ,
                                                null);
                var event = document.createEvent('MouseEvents');
                event.initMouseEvent ('click', true, true, window,
                     1, 0, 0, 0, 0, false, false, false, false, 0, null); 
                feed.singleNodeValue.dispatchEvent(event);
            } , 30);
           return;
       }
       // scroll control
       var h = SCROLL_HEIGHT;
       if(e.shiftKey) {
         h = h * -1;
       }
       var div       = document.getElementById("entries");
       var current   = document.getElementById("current-entry");
       if(current == null) {
           return;
       }
       var scrollTop = div.scrollTop;
      
       if(current.offsetTop + current.clientHeight > div.scrollTop + SCROLL_HEIGHT) {
           div.scrollTop += h;
       }

       if(div.scrollTop != scrollTop) {
           e.preventDefault();
           e.stopPropagation();
       }
     }
   }, true);
})();

見ての通りのゴリゴーリ。Google Reader にある関数を呼び出せた楽だなぁと思って js 見てみたけど解読不能 orz。initMouseEvent の引数ではまったけどなんとかできた。