2011-01-27 76 views
3

我正在爲我的系統類項目開發一個CLI程序,它需要在維護命令提示符時顯示傳入文本。單獨留下,即將到來的文字將通過任何人嘗試輸入。在其他應用程序中,我看到傳入的文本打印在提示本身的上方(或下方)。有沒有辦法在ANSI轉義中實現這個? ncurses看起來像是矯枉過正。在終端內隔離stdin和stdout

回答

2

您可以打印\r來清除提示:它會將光標返回到當前行的開頭。然後,您可以打印輸出,然後輸入一些空格來清除所有剩餘的輸入字符,換行符並重新打印提示。

使用ANSI序列或特定於終端的庫可以實現更多功能,但是我認爲只有使用ASCII才能可靠地進行這些操作。當然,除了打印242空白行來重畫整個屏幕。

編輯:對不起,我沒有正確回答ANSI部分。使用光標移動控制代碼和現有字符的打印空間,您幾乎可以做任何事情,並且有一些便利操作可以幫助您,例如「刪除行」。但請記住,Windows不能很好地發揮w/ANSI post XP,其他系統也不能保證。

0

首先,如果要在打印時保持提示,則不能使用諸如scanf之類的東西。您必須攔截鍵盤事件或使用非等待方法來獲取輸入。然後你可以得到行的終端數(n)並打印輸出的最後n-1行,然後提示。

my2c