Vimなどのコマンドラインアプリケーションはどのように機能しますか?具体的には、彼らは端末をどのように制御しますか?そして、後で参照できるようにVimのように端末を制御するアプリケーションを指す特定の用語がありますか?
答え1
vimやその他の半グラフィック(角度、完全な十字...などの半グラフィック文字を表示できます)アプリケーションは、特殊なエスケープシーケンスを送信して端末を制御します(カーソル位置、表示可能文字位置、色設定などを管理します) )。制御コードを使用すると、端末はこれを実行する特定のタスクに変換します。
標準出力にエスケープシーケンスをエコーすることはすべてのプログラマにとって悪夢であるため、常に異なる機能と異なるエスケープシーケンスを持つさまざまな端末があるため、移植不可能なコードを意味することは言うまでもありません。
すべてのタスクを抽象化するライブラリを作成しました。呪い。これで名前が付けられました。呪いまた、ウィンドウ管理などのより高いレベルの機能も提供します。
ncursesは次のように異なります。用語情報適切な端末機能記述を取得するために使用されるデータベース。
これはこの関数ライブラリのためです。vim, itraf-ng, alsa amixer, less, gdb,デフォルトのカーネル構成ユーティリティと端末を制御するその他の多くのユーティリティ。
これらのアプリケーションは一般的にコマンドラインユーティリティは通常、デフォルトのカーソル管理と編集機能を使用して、1行の入力を処理します。読書船図書館。
代わりに、ncurses
上記のリンクのマニュアルページで読むことができるように、次のプログラムを呼び出すことができます。インタラクティブで画面指向です。 vim
一般的に命名画面指向ed
比較修正行指向編集する。
コメントで次の提案を参照してください。
起動時に、アプリケーションは実行されたシェルからttyドライバの設定を継承し、これらの設定は元のAgettyで元の設定と非常によく似ている可能性があります。
これには、改行文字がキャプチャされるまで入力バッファリング、瞬時カーソル位置でEnterキーをエコーするなど、画面指向アプリケーションに必要とされないすべての機能が含まれます。
初期化時に、プログラムは現在のttyドライバ設定を保存し、プログラマの希望に応じてそれを適用します。
終了する前に...プログラマーは初期設定を復元することをお勧めします...予測不可能ですが、間違いなく混乱した状況で呼び出しシェルに戻る危険に直面しない限り...
答え2
一度に 1 文字ずつバッファを入力します。
キャリッジリターンが入力されると、バッファは一度に1文字ずつチェック(「構文解析」)され、指定された構文で配置されたトークンを見つけます。
次に、可能であれば、それに応じていくつかのコマンドを実行します。入力を解析できない場合は、コマンドソルバーが入力内容を処理できないことを示すエラーメッセージが表示されます。
コマンドシェルが停止するか、コンピュータがシャットダウンするまですすぎ、繰り返します。
基本的には他のコンピュータプログラムと同じです。入力、IFおよびELSEステートメント、データ操作(計算の実行とメモリー内のデータの移動)、および出力。