%EF%BC%9F.png)
基本上我想為我的終端設定動畫,但由於文字太長,我需要一個尋呼機。假設我想定期更改文字顏色。是否可以?
答案1
less
-r
使用該選項時支援原始 ANSI 轉義。它還支援線上擦除。
但您不會看到任何動畫。例如:
echo -e "foo\x1b[1G\x1b[2Kbar" > test.ansi
less -r test.ansi
只會列印bar
.
more
預設會傳遞 ANSI 轉義,但不支援我測試過的行編輯。
答案2
清除該行與更改終端顏色只有間接關係:如果更改背景顏色,那麼許多終端(Linux 控制台、rxvt、xterm 以及模仿其中之一的程式)將使用該顏色為背景的已清除區域著色。
less
確實使用了一些清除操作,但沒有\x1b[2K
。正在閱讀來源,它使用 termcap 介面使用多種功能。最相關的部分在術語資訊(5)手冊頁:
clr_bol el1 cb Clear to beginning
of line
clr_eol el ce clear to end of line
(P)
即,\x1b[K
和\x1b[K
,分別為el1
和el
。沒有傳統的 termcap 功能el2
,並且(除非您告訴使用或選項less
僅傳遞文件內容),不會發送.-r
-R
less
\x1b[2K
的情況也是如此more
,例如,如util-linux
套件:它僅使用 termcap 中的功能。與 不同less
,more
沒有將非列印字元直接傳送到終端的選項。
如果您使用-r
或-R
選項less
,您必須記住它是有限的:less
不知道(或不太在意)那些轉義符的作用。來自手冊頁:
-r
或者--raw-control-chars
原因“生的”要顯示的控製字元。預設是使用插入符號顯示控製字元;例如,control-A(八進位 001)顯示為“^A”。 警告:當-r
使用該選項時,less
不能追蹤螢幕的實際外觀(因為這取決於螢幕對每種類型的控製字元的反應方式)。因此,可能會導致各種顯示問題,例如長線在錯誤的位置被分割。
答案3
對轉義序列做出反應的通常是 tty(除非正在運行的程式將其設定為不遵守它們,在這種情況下程式本身可能會這樣做)。more(1)
進行相當原始的螢幕重寫(實際上足以寫出螢幕長度的行,並等待按鍵),所以我猜它只是傳遞輸入。less(1)
需要備份,所以需要對螢幕進行更細緻的控制。