Firefox をある程度の単位で上下

今さらながらに Greasemonkey とか便利なんじゃないかとか思いはじめていたりするんですけど。でも便利だけど書いてて楽しくないよねとか。要するに役に立つものはツマらない教の信者だというだけですけど。

なんとなくはてなブックマークで j とか k とか押してみたところ、項目単位でスクロールできることに気付いて、あーコレ gmail でもあったけど他でも結構使いたいかもなぁとか思って、既出予感ひしひしながらも、なんとなくスクロールする単位を検出してなんとなく上下にスクロールするスクリプトを書きました。人狼BBSだの四国だのの発言単位スクロールとかもできるとか。

はてなアンテナの JS をチラチラ見させていただいたのと、 getElementPositionY は http://d.hatena.ne.jp/ghostbass/20060718/1153228402 を参考にさせていただきました。

使いかたとかはよく知りません。私は ~/wrk/js/scroll_sections.js とかに保存して、 keyconfig と functions for keyconfig を使って、

f4kc_LoadSubScript("file:///home/i/wrk/js/scroll_sections.js");
initSections();
scrollSectionDown();

とかを Shift+J とかに割当ててるみたいです。以下ソース。

function getElementPositionY(e) {
    var y = 0;
    while (e.offsetTop) {
        y += e.offsetTop;
        e = e.offsetParent;
    }
    return y;
}

function comparePos(a, b) {
    return a - b;
}

var sects = new Array();

function initSections() {
    var document = _f4kcGetFocusedWindow().document;
    var sectElems = ['h1', 'h2', 'h3', 'h4', 'tr', 'li'];
    var i = 0;
    for (var j = 0; j < sectElems.length; j++) {
        var ns = document.getElementsByTagName(sectElems[j]);
        for (var k = 0; k < ns.length; k++) {
            sects[i] = getElementPositionY(ns[k]);
            i++;
        }
        if (sects.length > 9) break;
    }
    sects.sort(comparePos);
}

function scrollSectionDown() {
    var up = _f4kcGetFocusedWindow().pageYOffset;
    for (var i = 0; i < sects.length-1; i++) {
        if (up < sects[i]) {
            _f4kcGetFocusedWindow().scroll(0, sects[i]);
            return;
        }
    }
}

function scrollSectionUp() {
    var up = _f4kcGetFocusedWindow().pageYOffset;
    for (var i = sects.length-1; i > 0; i--) {
        if (up > sects[i]) {
            _f4kcGetFocusedWindow().scroll(0, sects[i]);
            return;
        }
    }
}

zsh で rpm のタブ補完

zsh はコマンドの引数に応じて補完対象をかえてくれるのはとても便利です。私的に実用性が謎だったのが、 scp user@host: の後のタブ補完と、 rpm -qi の後のタブ補完でした。両方とも補完速度が尋常じゃなく遅いわけです。

で、後者は rpm -qa が遅いのだろう、ということで簡単にキャッシュしてみることにしました。

rpm -qa > /data/rpmqa

などとしてキャッシュを作り、

#!/bin/sh

if [ "x$@" = "x-qa" ]; then
    exec cat /data/rpmqa
else
    exec /bin/rpm $@
fi

という内容のコマンド(引数が -qa ならキャッシュを投げて、そうじゃなければ普通に rpm を実行)を ~/bin の下に rpm という名前で置いてみたところ、補完がとても快適になりました。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h