2011-07-08 86 views
-1

我想輸出的東西到終端窗口,然後只清除它的一部分(如前半部分或季度等),而不是其餘部分。有什麼辦法可以做到這一點?我正在使用系統(「清除」),但清除了所有內容。我寧願不使用ncurses。任何幫助表示讚賞。在C++ unix中清除終端屏幕的一部分?

+0

什麼是您的終端? –

+0

只是使用Ubuntu的,所以無論終端在那裏 – Sterling

+0

如果沒有其他的工作,打印100次「\ n」,並重新打印什麼不需要更改 –

回答

3

如果您需要一個通用的解決方案,那麼它將以某種方式涉及通過使用特殊字符返回終端,用空白覆蓋要刪除的部分並恢復該部分,該部分仍然應該可見。

你可以看出,如何回到this的終端後。它包含一些示例,顯示如何使用回車(\ r)字符。

此外還有一個例子,它顯示瞭如何使用ansi轉義序列來獲取紅色文本。以同樣的方式,您可以使用ansi轉義序列寫入終端上的特定位置,看一看here。在這個鏈接中的「強制光標位置」應該讓您能夠爲每個想要清除的位置寫入空格。

但是,您應該知道,並非所有終端都支持這些方法,並且如果將輸出流式傳輸到文件,則它將包含這些特殊字符。

3

如果你計算出你的終端的功能是什麼,你可以簡單地用cout將它們寫入stdout。

如果您不確定從哪裏開始,可以嘗試如下所示:在提示符下鍵入man terminfo,您可能會收到一個終端功能列表。試試tput看看哪些工作。然後找出你需要打印的代碼的東西,如:

% tput el | od -t x1 
0000000 1b 5b 4b              
0000003 

發送這些字節到我的終端問題「clr_eol」(「厄爾尼諾」),它會清除該行的末尾。弄清楚如何在終端上移動光標,如何清除線條,然後就完成了。

當您使用gnome-terminal時,您可以這樣做來擦除前3行:將光標移動到主頁,擦除到行尾,向下移動,擦除到行尾,向下移動,擦除到行結束。

找出你需要打印的內容:

% (tput home ; tput el ; tput cud1 ; tput el ; tput cud1 ; tput el ; tput cud1 ; tput el ; tput cud1 ; tput el) | od -t x1 
0000000 1b 5b 48 1b 5b 4b 0a 1b 5b 4b 0a 1b 5b 4b 0a 1b 
0000020 5b 4b 0a 1b 5b 4b           
0000026 

發送的字節(1B 5B 48等)到標準輸出(與COUT)會做的伎倆從C++。

使用ncurses會更加便攜,如果你不想使用它,你可能會發現你最終會重新實現它。