2011-06-03 65 views
0

根據該(@程序使用的ncurses):劈裂像GNU屏的終端,編程

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

和此:

http://aperiodic.net/screen/faq#when_i_split_the_display_and_then_detach_screen_forgets_the_split

屏幕處理使用的termcap(窗口分割我幾乎不知道如何使用)而不是文本庫。我正在開發一個小型C++控制檯應用程序,我需要做同樣的事情。我嘗試了ncurses,這是一個明顯的選擇,但它不支持顏色的ANSI轉義序列(http://ascii-table.com/ansi-escape-sequences.php),我實際上做的是fork ()/ exec()4在同一個tty中轟擊shell,這在ncurses中是一塊蛋糕,但沒有顏色和很多失敗的轉義序列,看起來像垃圾。諸如printf()和std :: cout之類的方法與顏色完美配合,但在這種情況下無用,因爲ncurses依賴於它自己的函數來保持適當的位置。

在建議將轉義序列解析爲ncurses以使用庫的本機屬性着色輸出之前,請記住這是太多工作,應該有一個更優雅的方式來處理它(如GNU Screen)

那麼,如何解決它的任何想法?

在此先感謝

+0

如何製作一個包裝系統(腳本?),根據需要啓動「屏幕」,然後啓動您的控制檯應用程序以在其中運行。祝你好運。 – shellter 2011-06-03 22:16:46

+0

類似unix的系統的主要功能在於,能夠從較小的系統中創建更大的東西。所以@Lucas Black的評論是你可以得到的最佳答案。不要嘗試重新發明輪子,因爲你可以用方塊結束並使用已經完美的工作輪子= gnu屏幕。使用屏幕分割您的終端(並將在非ansi的工作),並在你應該在內部明星你的節目... – jm666 2011-06-03 22:55:44

回答

2

你不能讓下屬節目發出自己的轉義序列。如果你這樣做,他們會破壞你的屏幕格式。

GNU screen實際上是模擬自己的終端,即分析轉義序列,執行它們的邏輯,構建屏幕的內部表示,然後在它運行的任何終端上傳輸它。這是做到這一點的唯一理想方式。不幸的是,這是很多工作。

+0

我同意。至少@LucasBlack有'screen'源代碼來使用模型和資源。祝你好運! – shellter 2011-06-03 21:53:31