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()
を消してみました。そんだけです。