2011-09-26 90 views
12

有幾個庫,如ncurses可以幫助製作命令行GUI。ncurses et。人。工作?

簡而言之,它們是如何工作的?

我的第一個想法是,ncurses攔截所有鍵盤輸入,並通過逐行輸出它來繪製每個「幀」。然而,更仔細的檢查表明,每個新框架都會覆蓋前一個框架。它如何修改已經輸出的行?此外,它如何處理顏色?

編輯:同樣的問題適用於任何與「花哨」的界面,如vimemacs

回答

14

文本端子有不喜歡的東西將光標移動到特定位置在屏幕上,插入字符,刪除線等

每個終端類型是不同的,並且具有自己的一套命令序列的命令序列。 ncurses有一個數據庫(有關詳細信息,請參閱terminfo

內部ncurses維護屏幕的2個視圖:當前內容以及應用當前未決更改後屏幕的外觀。一旦程序請求屏幕重繪,ncurses會計算一種更新屏幕的有效方式,使其看起來像所需的視圖。確切的字符/命令序列輸出取決於正在使用的終端類型。

3

詛咒(我認爲也是ncurses)通過在屏幕上移動光標來工作。有控制序列來做這樣的事情。再次看看代碼,你會看到它們。這些序列不是ASCII控制字符,它們是以(umm ...)ESC開頭的字符串,也許是。請查看here以獲取更高級別的解釋。

+0

大多數終端支持(一些)[ANSI轉義序列](https://en.wikipedia.org/wiki/ANSI_escape_code)。他們以'\ 033 ['開始,'\ 033'確實是ESC。你可以在自己的終端上使用'echo -e'來打印其中的一些,看看會發生什麼。 (如果您已設法將終端設置爲不可見,則「重置」(盲目輸入並按回車鍵)將成爲您的朋友...) – 5gon12eder