ターミナル上で実行されるプログラムの場合、Vim の GUI はどのように実装されますか?

ターミナル上で実行されるプログラムの場合、Vim の GUI はどのように実装されますか?

ターミナル内で実行され、GUI を持つ Vim (または top など) などのプログラムがどのように実装されているのかわかりません。ターミナルは文字のみを表示でき、Vim は複数のウィンドウを表示できるだけでなく、カーソルをあらゆる方向に移動させることも可能であると想定されています。

もう一つの例はLinux情報を表示するユーティリティリアルタイム更新された場合、このプログラムは、下へスクロール新しい印刷文字を表示しますか?

答え1

ターミナルで実行されているアプリケーションには、文章ユーザーインターフェースは、ほとんどの端末がダム端末文字を印刷して次の行に移動するだけの「インテリジェント」端末ですが、制御文字そしてエスケープシーケンス「現在の行を消去し、後続の行を上にスクロールする」、「位置 (53,7) に移動する」、「今後は明るい赤で印刷する」などの意味を持ちます。

ほとんどの端末エミュレータは、xterm のエスケープシーケンス、それ自体は、VT100ハードウェア端末とその後継機。アプリケーションは、端末を介してさまざまなアクションを実行するために送信するエスケープシーケンスを認識します。タームキャップまたは用語情報データベース。キーボード入力とテキスト出力はどのように機能しますか?(「ターミナルで実行するテキストモードアプリケーション」セクション)および$TERM はどのように、どこで解釈されますか?詳細については。

Vimにはテキストユーザーインターフェースに加えて、GVimと呼ばれるグラフィカルユーザーインターフェースもあります。このインターフェースは、X11 プロトコル、テキスト端末ではできません(もちろん、打ち上げテキスト端末内からアプリケーションを起動しても、その端末には表示されません。

答え2

vim別々の実行可能ファイルでgvim、異なるライブラリにリンクされている場合もあります。 1 つの実行可能ファイルでいずれかのインターフェースを実行することもできます (たとえば、elvis と emacs がこれを実行します)。 1996 年の vim 4.0 では、-gGUI バージョンを使用するように指示するオプションが追加されました (この場合、同じ実行可能ファイルの一部になります)。

4.0のアナウンスのコピーは見つけられませんでした(オプションの動機に関する手がかりを与えてくれるかもしれません-g(vimのアナウンスメーリングリストは2000年に開始されました)。1997) ですが、Laurent Duperval による古い FAQ で言及されています。

7.3 How can I make Vim faster on a Unix station?

   The GUI support in Vim 4.0 can slow down the startup time noticeably.
   Until Vim supports dynamic loading, you can speed up the startup time
   by compiling two different versions of Vim: one with the GUI and one
   without the GUI and install both. Make sure you remove the link from
   $bindir/gvim to $bindir/vim when installing the GUI version, though.

   If screen updating is your problem, you can run Vim in screen. screen
   is an ascii terminal multiplexer. The latest version can be found at
   <URL:ftp://ftp.uni-erlangen.de:/pub/utilities/screen>.

私の記憶では、かなり長い間、2つの実行ファイルがありました(それ変更するには、実際に使用されているパッケージについてかなりの調査が必要になりますが、この機能は 1996 年から存在していました。

どちらのタイプのインターフェースでも、ディスプレイを更新する方法はあります。gvimの場合はXライブラリを使用しますが、top(またはvim)はエスケープシーケンスを使用します。システムによっては、これら両方がタームキャップアプリケーション、ncursesのtermcapインターフェースなどを使用してエスケープシーケンスのレパートリーを取得します(top実際には使用表示用の ncurses などhtop)。vim は組み込みテーブル (多くの場合冗長) を使用してそのレパートリーを拡張します。

興味深いことに、 Debianのprocpsのバージョンはtop(比較的珍しいことですが)用語情報アプリケーションを調べるとわかるように、ソースコード

答え3

オリジナルの TTY に続いて、プリンターを VDU に置き換える端末が登場しました。

VDU は紙とは少し異なる特性を持っています。ディスプレイ上の文字は、単に打ち消すだけでなく、消去したり置き換えたりすることができます。

ASCII は基本的なライン プリンタに十分な制御文字を提供しましたが、VDU を想定していませんでした。追加の端末固有の制御は、「エスケープ」を使用して ASCII でエンコードされます。エスケープ シーケンスは ASCII エスケープ文字で始まります。シーケンス内の次の文字は、端末固有の制御として解釈されます。

ビジュアル エディターは、viこの新しいテクノロジを使用するアプリケーションの良い例です。

エスケープコードのセットは標準化されています。最新のドキュメントをお持ちの場合は、「ANSIエスケープ」という用語を調べるとよいでしょう。索引

関連情報