SNSへはこちら

slコマンドをオレオレ仕様にチューニング

ls の typo を矯正するコマンドとして sl があります。複数 OS を使った方なら分かるでしょうが、このコマンド、Mac と Linux で挙動が少し異なるんです。特にすぐ分かるのが、SL の走るスピードが違うということです。

この記事ではこのスピードをチューニングしてやろうという記事になります。

sl – cure your bad habit of mistyping

速度の違いを見てみる

ここでは実際にどう動くスピードが変わってくるかお見せしましょう。まずは Linux。Raspbian で動かしました。

続いて Mac。brew でインストールしたものです。

と、こんな感じで違ってきますね。この差は一体何なんでしょう…?

ダウンロード先に依る違い

いろいろ検証した結果、実は OS による違いではなく、どこからソースを引っ張ってきたかで挙動が変わるようなのです。

製作者豊田さん御本人による GitHub のリポジトリでは動きは遅いです。Homebrew もここから参照していると考えられます。

Ubuntu における APT のリポジトリでは動きは速いです

GitHub版は Version 5.03、APT 版は Version 3.03 です。バージョンがずいぶん違いますね。何があったんでしょう。そこでソースコードを見てみることにします。以下は GitHub 版 sl.c の main 関数の一部です。

    for (x = COLS - 1; ; --x) {
        if (LOGO == 1) {
            if (add_sl(x) == ERR) break;
        }
        else if (C51 == 1) {
            if (add_C51(x) == ERR) break;
        }
        else {
            if (add_D51(x) == ERR) break;
        }
        getch();
        refresh();
        usleep(40000);
    }

この usleep(40000) がクサいですね。ここを半分の usleep(20000) にしてみます。すると…なんと、APT 版と同じ挙動になりました!

2つのバージョンの比較

バージョンそのものが異なっているので挙動が変わっているのですが、今の部分が変更されたというログがないか見てみます。するとファイル冒頭で

/* sl version 4.00 : add C51, usleep(40000) /
/
by Toyoda Masashi 2002/12/31 /
/
sl version 3.03 : add usleep(20000) /
/
by Toyoda Masashi 1998/07/22 */

となっています。ふむふむ、APT 版の Version 3.03 が速い sl の最終版なのですね。。。どうやら APT のリポジトリでは更新が止まってしまっているようです。

そしてなぜ待ち時間を2倍にしたのか。これは多分、打ち間違えを矯正するために敢えて SL の速度を落とし、自省の念を駆り立てようとしたのではないでしょうか。しかしながら我々は技術を持っていますので、これを戻して快適な sl ライフを送ることができるのです。あれ?このコマンド本来の目的って??

ついでに

usleep() を消してみました。そんだけです。