仕組みを学べるシンプルなターミナルエミュレータ「eduterm」
私たちがよく使用するターミナル。
毎日使っているはずなのに、あまりその仕組みを知らない方も多いはず。
先日、私も思い立ってxtermのソースコードを読んでみようしたら、C言語のifdefの嵐に圧倒され、途中で中断してしまいました。
xtermは様々なプラットフォームで動作することを期待されているので、ifdefでたくさんの場合分けをしており、思いのほか読みづらいのです。
もっとシンプルなターミナルはないものかと、インターネットをさまよっていたところ、ちょうどよいターミナルを発見しました。
それが、この「eduterm」です。
edutermのソースコードは、たった1つのソースコードeduterm.cに書かれており、448行しかありません。 しかも、たくさんのコメントを残してくれていて、とても親切なソースコードです。
コンパイルして実行すると、Xウィンドウシステムをサポートしており、ウィンドウが立ち上がります。 (ウィンドウの処理も、ターミナルとしての処理も、そしてコメントもたくさん入っているのに、この程度の行数で済んでいることに驚きです。)
ターミナルは内部で擬似端末を用意し、シェルを起動して、入力を待ち受けるようになります。
「ls」とコマンドすれば、その返答が返ってきます。
ただし、「vi」とコマンドしようものなら、わけのわからないエスケープシーケンスがたくさん表示されてしまいます。
viはlsと違って、出力に複雑なことをしています。 viは画面上の適切な位置に、文字やカーソルを表示しなければいけないため、「VT100」というプロトコルを使っています。 そして、edutermはVT100のエスケープシーケンスをサポートしていないのです。
正直、このままでは普段使いのターミナルになることはないでしょう。
しかし、ターミナルの基本的な動きを学習するには、最適なソースコードなのです。
edutermを紹介している作者のブログ記事がこちらにあるので、興味のある方は合わせて読んでおくとよいかもしれません。
「出来の悪い子ほどかわいい」とよく言いますが、このターミナルをベースにして少しずつ鍛え上げていき、VT100の機能を追加し、フォントを変えたり、色を変えたりして、自分たちのターミナルを作ってみるのも楽しいですね!