如果Vim是一個在終端上運行的程序,那麼它的GUI是如何實現的呢?

如果Vim是一個在終端上運行的程序,那麼它的GUI是如何實現的呢?

我不明白如何實現諸如 Vim(或 top 等)之類的程序,這些程序在終端內執行並具有 GUI。假設終端只能顯示字符,而Vim不僅可以顯示多個窗口,還可以處理遊標在各個方向上的移動。

另一個例子是linux頂部顯示資訊的實用程式即時的已更新,該程式如何可能更新資訊而不是製作向下捲動並顯示新的印刷字元?

答案1

在終端機中運行的應用程式可以有一個文字使用者介面,因為大多數終端不僅僅是啞終端只能列印字元並移至下一行,但“智慧型”終端支援控製字元轉義序列其含義包括“擦除當前行並向上滾動後續行”、“移動到位置(53,7)”、“從現在開始以亮紅色打印”等。

大多數終端仿真器實現了大部分xterm 的轉義序列,本身大部分相容VT100硬體終端及其後繼者。應用程式知道要發送什麼轉義序列來透過術語帽或者術語訊息資料庫.看鍵盤輸入和文字輸出如何運作?(“文字模式應用程序,在終端機中運行”部分)和$TERM 如何以及在何處解釋?更多細節。

除了具有文字使用者介面之外,Vim 還具有稱為 GVim 的圖形使用者介面。該介面運行在圖形終端上,該終端實現了X11協議,不在文字終端上(但當然你可以發射從文字終端內運行應用程序,它只是不會在該終端中顯示)。

答案2

vim並且gvim可能是單獨的可執行文件,與不同的庫連結。可以讓一個可執行檔執行任一介面(例如 elvis 和 emacs 即可執行此操作)。 1996 年的 vim 4.0 增加了一個-g選項,告訴它使用 GUI 版本(在這種情況下,它是同一執行檔的一部分)。

我沒有找到 4.0 的公告副本(這可能提供了一些關於該選項動機的線索-g(vim 的公告郵件列表始於1997年),但請參閱 Laurent Duperval 在舊常見問題中提到的內容:

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>.

我的記憶是,在很長一段時間裡,有兩個可執行檔(當更改需要對實際使用的包進行大量研究)。但這種能力從 1996 年就已經存在了。

對於任一類型的介面,都有多種方法可以更新顯示。對於 gvim,它使用 X 庫,而終端應用程式例如top(或vim) 使用轉義序列。根據系統的不同,這兩者都是術語帽應用,使用 ncurses 的 termcap 介面等來取得它們的轉義序列(某些版本top實際上使用ncurses 用於顯示,例如htop)。 vim 使用內建表格(通常是多餘的)來增強此功能。

有趣的是, Debian 中procps的版本top是(相對罕見)術語訊息檢查其應用程式可以看出原始碼

答案3

繼最初的 TTY 之後,終端機已經可用,並用 VDU 取代了印表機。

VDU 的特性與紙本文件略有不同。顯示器上的字元可以被擦除和替換,而不僅僅是過度列印。

ASCII 為基本行式印表機提供了足夠的控製字符,但沒有預見到 VDU。其他特定於終端的控制項使用「轉義符」以 ASCII 進行編碼。轉義序列以 ASCII 轉義字元開始。序列中的以下字元被解釋為特定於終端的控制項。

視覺化編輯器vi是使用這項新技術的應用程式的一個很好的例子。

轉義碼集正在標準化。如果您有足夠多的最新文檔,「ANSI escape」可能是在指數

相關內容