像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平臺?
對於每個終端仿真程序,實現可能不同。 – 2014-10-06 01:45:12
@AndersonGreen從我讀過的,似乎有ANSI轉義序列,允許將終端上的光標設置爲任意位置。 Curses或Ncurses將這些序列封裝到一個可用的接口中,以便您可以編寫更多可移植的代碼。 – iFreilicht 2014-10-06 10:31:06