2012-05-08 33 views
2

我試圖圍繞VT102序列和ncurses這樣的庫如何工作。xterm/vt102序列填充終端窗口,然後按鍵退出,清除屏幕上的任何內容?

舉個例子,當我打開Emacs時,它會填充終端窗口。當我打C-XC-C,程序將退出,我的終端窗口看起來完全像看上去我之前推出的Emacs(即我的光標上面的線是用我自己的zsh歷史,沒有任何的emacs已經呈現emacs命令)。

作爲一種「hello world」,我寫了一個小小的ruby腳本,打開/dev/tty,然後爲我的終端中的行編寫\x1B[48;597m\n(空白行,帶背景色)。該程序然後睡5秒鐘,讓我快樂地盯着一個明亮的橙色屏幕瞬間。然後它退出,離開我的zsh提示符,在它上面有53條明亮的橙色線。

兩個問題:

  1. 正在寫空行與背景色正確的方法來填充顏色的終端窗口?
  2. 如何通過發送一些VT102序列到/ dev/tty來完全清除屏幕?

我能送\x1B[2J,但這種做同樣的事情,當我執行clear命令,實際只是轉移所有內容的終端窗口,直到我的光標是一個空白的最頂端窗口,而不是將光標留在任何它自然會出現的地方,如果我的程序沒有在屏幕上寫入空白行的負載。

PS:不知道什麼標籤用在這裏,任何人實際上可能被訂閱。

回答

3

正在寫空行與背景色正確的方法來填充顏色的終端窗口?

否。正確的方式(在支持BCE *的終端上)是設置背景顏色,然後使用ED序列(例如^[ [ 2 J)擦除屏幕。

*:最先進的終端做

我如何徹底清除屏幕通過發送一些VT102序列到/ dev/tty的?

使用ED。往上看。

如果你真正想要做的是切換到備用屏幕(Emacs等在你的例子是做),備用屏幕是由私人模式1049控制您可以切換使用它來^[ [ ? 1 0 4 9 h,並切換回使用^[ [ ? 1 0 4 9 l 。但請注意,這是一個xterm擴展;它不是完全標準的,並且不被任何DEC硬件終端(例如VT102)支持。

+0

真棒,新的關鍵字,謝謝:)'[?1049h'和'[?1049l'做* *差不多正確的事情,除了光標在屏幕的頂部是右後我出口的位置。我要讀一下你提到的這些擴展。 – d11wtq

+0

模式?1049應該在你設置/重置時保存和恢復光標 - 確保你沒有意外地做光標前/後的任何事情。有關更多控制順序的列表,請參閱http://rtfm.etla.org/xterm/ctlseq.html,有關原始DEC文檔的內容請參閱http://vt100.net/docs/。 – duskwuff

+0

原來我只是半睡半醒,並輸入了'1'而不是'l';)非常感謝,我現在真的開始了,知道我在找什麼! – d11wtq

相關問題