回答:
あなたが尋ねているのは、実際にはグラフィックスAPIではなく、単なる端末制御文字です。
その背後には多くの歴史がありますが、当時の端末はテレタイプマシンでした。基本的には、シリアル接続でトラックフィード紙をコンピューターに接続したタイプライター。文字を入力すると、そのバイナリ値がコンピューターに送信されます(ページに入力することもできます)。コンピューターは、要求したものの出力として文字を印刷します。
端末を制御するために特殊文字が使用されました(制御キーの出所であり、これらの文字を生成するために使用されました)。たとえば、^H
または^?
バックスペースの場合^M
は、キャリッジリターン(カーソルを行の先頭に移動)で^J
あり、ラインフィード(ページを1行上に移動)です。一部の制御コードには、制御文字を生成するためのC(ほとんどすべてのプログラミング言語で共有)のエスケープシーケンスがあります。前述のコントロール\b
は\r
、\n
それぞれ、です。
端末エミュレータあなたが今日使用するには、その音が、古いテレタイプマシンのふりをされて、それのソフトウェアを好きなものばかりです。ある意味では、まるでタイプライターを使って通信しているとUnixがまだ思っているかのようです。
の場合はcurl
、行全体を書き込んで\r
から、カーソルを行の先頭に移動して送信(キャリッジリターン)してから、別の行を書き込みます。改行は送信されないため、画面上の同じ行に上書きされ続けます。
これを実証するために試すことができるものを以下に示します。
echo -n "First" ; sleep 5 ; echo -en "\rSecond\n"
「First」という単語が印刷されます(ただし、新しい行は送信されません)。5秒後に「Second」という単語に置き換えられ、新しい行が送信されます。このパターンは無期限に繰り返すことができます。自分で「3番目」を追加してみてください。予想外の結果が表示されます;-)
これらおよびその他の制御文字の詳細については、ascii(7)
マニュアルを参照してください。
その質問は実際にはいくつかの質問であり、「制御文字」はその一部のみを扱いますcurl
。たとえば、の進行状況バーです。より一般的には、これらは端末(および端末エミュレータ)の一般的な機能です。
これらの一般的な機能のほとんどは、ECMA-48:Control Functions for Coded Character Setsで標準化されています。ただし、他の機能はありません。これらは実装定義です。
ECMA-48は制御機能を指します。これには、制御文字と制御シーケンス(エスケープシーケンス、ANSIシーケンスなどと呼ばれることが多い)が含まれます。
いくつかの制御文字は、簡単な操作に使用されます。
のプログレスバーcurl
は、これらの簡単な操作を使用して構築されています。しかし、制御文字ができることはそれだけです。制御シーケンスは、たとえば
単純なものと複雑なものの類似点については、これで十分です。制御シーケンスは、テキストと背景の色の変更、画面からのテキストの消去、反転ビデオ(または太字、下線、点滅)でのテキストの表示にも使用されます。
逆ビデオ(または色付き)プログレスバーを描画するプログラムは、コントロールシーケンスを使用します。
制御シーケンスはもっと多くのことができますが、特定のことしかできません。それらを組み合わせてテキストエディターを作成すると、インストール画面(および色付きの進行状況バーを描画するプログラム)は複雑になります。それらのいくつかは、これらのことを知っているライブラリーを使用することによって、より単純になります。最初は、termcap(および数百種類の端末のデータベース)をterminfo(および約1000種類の端末のデータベース)に拡張しました。
標準化されていても、使用できる端末の説明は多数あります。そのため、これらのアプリケーションの最も些細なものを除くすべてのライブラリを引き続き使用します。1つはncurses( "new-curses")、もう1つはスラング(技術的には "S-Lang")です。
参考文献:
ncurses
。