回答:
通常、コンソールプログラムはcursesまたはその後継¹のいずれかを使用して、話している種類のテキストユーザーインターフェイスを構築します。
これらのライブラリはtermcap
、terminfo
.² と呼ばれる2つのデータベースのいずれかを使用します。これらのデータベースには、多数の多様な端末タイプで目的のアクションを取得するために送信するコードをライブラリに伝えるマップが含まれます。これらのデータベースで定義されている端末タイプの大部分は、実際の端末の時代を生き延びていなかったため、現在では歴史的な関心のみがあります。
最新のUnixターミナルエミュレータ³は、ANSI X3.64プロトコルまたはそれ以降のバリアントのいずれかを使用します。
ANSI X3.64:テレタイプとは対照的に、「ガラス端末」を制御するための標準は、リモート端末が解釈する特殊な文字シーケンスに基づいています。たとえば、UnixボックスがANSI X3.64互換端末に画面の左上隅にカーソルを移動するように指示する場合、文字を送信しますESC
[
1
;
1
H
。最初の2文字は、端末に制御シーケンスをH
予期するように指示します。1は行と列であり、「カーソルの移動」を意味するコマンドです。⁴
DEC VT100:最初の本当に人気のあるANSI互換のガラスターミナルは、Digital Equipment CorporationのVT100です。ANSIのデジュール標準を市場で証明することにより、今日でも重要なデファクト標準を確立しました。
これはVT102プロトコルと呼ばれることもありますが、これは後にコスト削減された(したがって、より一般的な)バージョンのVT100と、使用可能なすべての拡張オプションが組み込まれています。
DEC端末プロトコルは下位互換シリーズであり、1978年に導入された最初のANSI互換モデル(VT100)から、1995年にDECから端末ビジネスを購入した後、Boundless Technologiesが生産したVT500シリーズモデルまで拡張されます。現在は廃業していますが、彼らの端末は時々中古市場に時々現れます。
xterm:ANSIの一種のアマルガムとVTの標準。のようなGUIターミナルエミュレーターxterm
またはその派生物のいずれかを使用するときは常にxterm
、通常はより近代的なxterm-color
またはxterm-color256
バリアントのターミナルプロトコルも使用しています。
Linux:Linuxコンソールは、プロトコルと同じ精神で、ANSI端末プロトコルの拡張バリアントも使用しxterm
ます。拡張機能のほとんどは、PCとガラス端末の違いに関係しています。たとえば、IBMキーボードには、DEC VT-whateverにないキーがいくつかあります。(およびその逆。)
一部のUnixシステムには、独自のコンソール端末プロトコルもあります。scoansi
たとえば、SCO Unixes用のANSI X3.64バリアントがあります。
典型的なターミナルエミュレータプログラムは雑種のようなもので、単一のターミナルモデルを正確にエミュレートしません。VT320までのすべてのDEC VTエスケープシーケンスの96%をサポートする可能性がありますが、ANSIカラー(VT525機能)や任意の数の行と列などの拡張もサポートします。プログラムがcurses
VT320プロトコルを使用することを(または何でも)伝えたいとしても、プログラムがこれらの機能を必要としない場合、理解できないコードの4%は見逃されないかもしれません。そのようなプログラムは、厳密にはVT320と互換性があるとしても、VT320と互換性があると宣伝する場合があります。⁵
他にも注目に値する標準がいくつかありますが、それでもなお遭遇する場合があります。
Wyse:ガラスターミナルの最も初期の独立したプロデューサーの1つであるWyseは、ワークステーションコンピューティングがミニコンピューターに取って代わる前の1980年代初頭にターミナルの製造を開始しました。Wyse端末はVT100やその他の一般的な端末プロトコルをエミュレートできましたが、独自のネイティブコードもありました。
IBM 3270:これは厳密には「Unix」ターミナルタイプではありませんが、UnixシステムをIBMメインフレームに接続する必要があるため、IBM 3270シリーズターミナルエミュレータプログラムが作成されました。後の IBM 5250シリーズ端末用のエミュレーターもかなり一般的で、最近では AS / 400およびSystem iミニコンピューターへの接続に最もよく使用されています。
Tektronix 4014:PCおよびワークステーションがガラス端末を大幅に置き換え、ビットマップグラフィックを標準機能にする前に、上記のエスケープシーケンスと同様のテキストコマンドに応答して画面にグラフィックを描画する高価なグラフィック端末がありました。おそらくこれらの中で最も人気があったのは、Tektronix 4010シリーズです。
とても楽しかったです。グラフィックを描いたプログラムを書くこともできますが、それを単純に実行してローカル端末に描画する代わりに、その出力をファイルにリダイレクトできます。
$ ./my4014program > my-neat-graphic
その後、そのファイルを他の誰かに送信すると、彼らはcat
Tek端末でプログラムを使用せずにグラフィックを見ることができます。魅力の一部は、これらの端末の描画がどれだけ遅いかでした。そのため、数秒間にわたってグラフィックが蓄積されるのを見ることができました。
環境変数をcurses
調べることで、ライブラリの使用を希望している端末標準を確認できTERM
ます。
$ echo $TERM
xterm-color
いつssh
別のシステムに、TERM
リモートのUnixボックスは、ローカル端末と通信する方法を知っているので、変数が運ばれます。
これらのプロトコルの多くはANSI X3.64のバリアントであり、ユビキタスなASCIIおよびUTF-8文字コーディング標準が他の多くのことを処理するため、誤ったTERM
変数は通常壊滅的ではありません。壊れがちなのは、HomeキーやPage Upキーなどの拡張キー、Altキーとキーの組み合わせ、色、太字などの活字表示機能です。
脚注:
最も一般的には、ncurses。
S-Langcurses
など、API に対する完全な競合他社もあります。
AT&T terminfo
はBSDのtermcap
データベースに代わるものとして公布され、それを置き換えるのに大部分は成功しましたが、まだ古いtermcap
データベースを使用するプログラムがまだあります。これは、現代のシステムでまだ見られる多くのBSDとAT&Tの違いの1つです。
私のmacOSボックスにはありませんが/etc/termcap
、/usr/share/terminfo
ありますが、FreeBSDの標準インストールは、これら2つのOSがコマンドラインレベルで非常によく似ている場合でも、逆の方法です。
適切に作成されたUnixプログラムは、これらのエスケープシーケンスを直接出力しません。代わりに、上記のライブラリのいずれかを使用して、「カーソルを位置(1,1)に移動する」などを指示し、ライブラリはTERM
環境変数設定に基づいて必要な端末制御コードを出力します。これにより、プログラムを実行する端末の種類に関係なく、プログラムは適切に動作します。
古いテキスト端末には、プログラムであまり使用されなかった多くの奇妙な機能がありました。そのため、多くの一般的な端末エミュレータプログラムは単にこれらの機能を実装していません。一般的な省略は、sixelグラフィックスと倍幅 /倍高テキストモードのサポートです。
のメンテナxterm
は、vttest
などのVT端末エミュレータをテストするために呼び出されるプログラムを作成しましたxterm
。他のターミナルエミュレータに対して実行して、サポートしていない機能を見つけることができます。