2014-10-05 90 views
1

emacs,vim,joe,joe或甚至nano這樣的終端文本編輯器能夠在命令行內顯示任意的UI元素,而不必每次都完全重寫整個UI,而是覆蓋當前是他們的UI。終端文本編輯器的UI如何實現?

使用常規輸出流,您只能使用返回字符'\r'跳轉到當前輸出行的開頭並在其上寫下,但從我發現的不能跳到多行,cout << "\r\r\r\r\r\r";具有相同效果如同cout << '\r',所以一切都緊跟着一條換行符,顯然是石制的。

其他應用程序也做類似的事情,例如Ubuntu上的$dpkg-reconfigure ca-certificates或圖形包管理器中的​​。他們還畫出UI元素的輪廓,這可能只是特殊字符。但是,他們仍然需要覆蓋多行控制檯輸出。

他們是怎麼做到的?行爲是否可移植到Windows平臺?

+0

對於每個終端仿真程序,實現可能不同。 – 2014-10-06 01:45:12

+0

@AndersonGreen從我讀過的,似乎有ANSI轉義序列,允許將終端上的光標設置爲任意位置。 Curses或Ncurses將這些序列封裝到一個可用的接口中,以便您可以編寫更多可移植的代碼。 – iFreilicht 2014-10-06 10:31:06

回答

3

你會發現,這些程序取決於庫調用的ncurses:

http://en.wikipedia.org/wiki/Ncurses

有建立適用於幾乎所有的操作系​​統。

+1

這是我需要的關鍵字。關於這個的一個很好的問題:http://stackoverflow.com/questions/7558348/how-do-ncurses-et-al-work – iFreilicht 2014-10-05 15:30:11

2

curses是一個unix庫,可讓您在任意位置操作終端的內容。 ncurses是一個免費的,與供應商無關的curses版本,以及在linux上使用的curses庫。

dpkg-reconfigure使用建立在curses之上的對話框,並提供用戶界面小部件而不是原始終端訪問。

ncurses包括你可以用來實現用戶界面小部件的擴展「菜單」,「窗體」,「面板」,儘管如果你走這條路線它會非常快速地變得非常複雜。

關於windows,在「dos框」終端中有本地運行的pdcurses。如果您限制自己的公用子集,可以編寫在Windows上使用pdcurses和在Linux上使用ncurses的可移植程序。或者,您可以使用cygwin在Windows上使用ncurses。另一種替代Windows的方法可能是Borland TVision - 如果你能找到舊版本的Borland的turbo pascal或C++編譯器,那麼它們包含一個稱爲TVision的文本用戶界面的完整應用框架。不知道這些代碼生成的代碼是否仍然可以在現代Windows版本上運行。

相關問題