基本上我想为我的终端设置动画,但由于文本太长,我需要一个寻呼机。假设我想定期更改文本颜色。是否可以?
答案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)
需要备份,所以需要对屏幕进行更细致的控制。