端末のグラフィックAPIとは何ですか?

端末のグラフィックAPIとは何ですか?

一部のプログラムでは、画面上の同じ場所(3行目、5列目など)に文字を複数回書き込むように背景とフォントの色をどのように設定しますか?

curl google.com > aいくつかの例は、いくつかのインストール画面とほぼすべてのテキストエディタに表示される進行状況バーです。

答え1

あなたが要求するのは、実際にはグラフィックAPIではなく、端末制御文字にすぎません。

その後には多くの歴史がありますが、当時のターミナルはテレタイププライターマシン。基本的には、シリアル接続を介してコンピュータに接続されているトラック用紙フィーダを備えたタイプライターです。文字を入力すると、バイナリ値がコンピュータに送信されます(ページに入力することも含まれます)。コンピュータは、要求されたコンテンツの出力として文字を再印刷します。

特殊文字は端末を制御するために使用されます(ここでこれらの文字を生成するために使用される制御キーが提供されます)。たとえば、バックスペースキー^H、キャリッジリターン文字(カーソルを行の先頭に移動)、または改行文字(ページを1行上に移動)です。一部の制御コードには、制御文字を生成するためのCのエスケープシーケンス(ほとんどすべてのプログラミング言語で共有)があります。以前にリストされたコントロールは、です。^?^M^J\b\r\n

これ端末エミュレータ今日、あなたが使用しているソフトウェアは、文字通り古いテレタイプマシンで偽装されたソフトウェアです。ある意味では、Unixがまだタイプライターを使って通信していると思うのと同じです。

の場合は、curl1行全体を書き込んでから\r(Enter)を送信し、カーソルを行の先頭に移動してからもう1行を書き込みます。改行文字が送信されないため、画面の同じ行に書き込みを続けます。

これにより、これを証明できます。

echo -n  "First" ; sleep 5 ; echo -en "\rSecond\n"

「First」という単語が印刷されていることがわかります(ただし、新しい行は送信されません)。 5秒後、「Second」という単語に変わり、新しい行が送信されます。このパターンを無限に繰り返すことができます。 「3番目」を直接追加してみると、思わぬ内容が表示されるはずです;-)

これらの制御文字とその他の制御文字の詳細については、ascii(7)マニュアルを参照してください。

答え2

似たようなものをお探しですか?呪い

答え3

この質問は実際にはいくつかの質問で構成されており、「制御文字」進行状況バーなどの小さな部分のみを解決してくださいcurl。より一般的には、これは端末(および端末エミュレータ)の一般的な特性です。

これらの共通機能のほとんどは標準化されています。ECMA-48:エンコードされた文字セットの制御機能。しかし、他の機能はいいえ。実装が定義されています。

ECMA-48は以下を指す。制御機能。含む制御文字そして制御シーケンス(しばしばエスケープシーケンス、ANSIシーケンスなどと呼ばれる)

一部の制御文字は次の目的で使用されます。シンプル次の操作

  • 同じ行の前の列にカーソルを移動します。
  • 同じ行の最初の列にカーソルを移動します。
  • 同じ行の次のタブストップにカーソルを移動します。
  • カーソルを次の行に移動し(画面スクロールもしすでに最後の行にあります)

進行状況バーは、curlこれらの簡単な操作を使用して作成されます。しかし、制御キャラクターはちょうど決まった分だけでき、それ以上はできません。制御シーケンスははるかに多くのことを行うことができます。例えば、

  • カーソルを画面の行/列に移動します。
  • 画面の同じ列にある任意の行にカーソルを移動します。
  • 画面の同じ行にある列にカーソルを移動します。
  • 画面上のすべての列のタブ停止設定
  • カーソルを前の行に移動
  • カーソルを動かさずに画面を上下にスクロールします。

単純/複雑さの類似点はこの程度です。コントロールシーケンスは、テキストと背景の色を変更したり、画面からテキストを削除したり、テキストを反転ビデオ(または太字、下線、または点滅)として表示するためにも使用されます。

逆方向ビデオ(またはカラー)プログレスバーを描画するプログラム制御シーケンス

制御シーケンスはより多くのタスクを実行できますが、特定のタスクのみを実行できます。テキストエディタ、設定画面(そして色付きのプログレスバーを描くプログラム)を作成するために、これらすべてをまとめると複雑になります。これらを理解するライブラリを使用すると、これらのいくつかを簡単に作成できます。最初はtermcap(および数百の端末で構成されたデータベース)があり、terminfo(および約1000の端末で構成されるデータベース)に拡張されました。

標準化しても、数十の端末記述を使用できます。使用。したがって、私たちは最もマイナーなアプリケーションを除くすべてのアプリケーションにライブラリを使い続けます。 1つはncurses("new-curses")、もう1つはスラング(技術的には "S-Lang")です。

追加資料:

関連情報