我正在运行Ubuntu 14.04,并使用其中一个虚拟终端(TTY [1-6],可通过Ctrl-Alt-F [1-6]访问);我想将光标的外观从表面上的默认值(闪烁的下划线)永久更改为闪烁的框。我可以临时更改它,但是当某些应用程序运行时它会一直重置。
最初,TTY会话中的光标样式是闪烁的下划线。我发现可以使用以下命令将其更改为闪烁的框:
printf '\e[?8c'
这会更改终端中的光标,并反映在emacs或elink之类的程序中。所以我把上面的命令放到我的.bashrc文件中。
但是,某些应用程序似乎将光标样式恢复为闪烁的下划线,并且即使退出这些应用程序后,这种情况仍然存在。我可以通过重新发出上述命令,获取.bashrc或注销并重新登录来将光标样式重置为闪烁的框。
例如,考虑以下三个应用程序(tmux,emacs,elinks)如何影响游标样式:
我应该注意,我有emacs设置来将光标样式(在emacs内)设置为一个框,并且虽然我在tmux中搜索了设置光标样式的设置,但在tmux的手册页中没有找到任何内容,状态:
tmux understands some extensions to terminfo(5):
[...]
Cs, Csr
Change the cursor style. If set, a sequence such as this may be used to change the cursor to an underline:
$ printf '\033[4 q'
If Csr is set, it will be used to reset the cursor style instead of Cs.
不幸的是,我不知道如何“设置Cs”,并且如上所述,我试图发出printf命令将tmux内的光标样式设置为无效。
另一个有趣的注意事项是,在运行X终端仿真器(例如XFCE4 Terminal)时,不会发生更改光标样式的问题。这似乎仅在TTY中发生。
我似乎找不到有关其他人的任何信息,在提到的应用程序中有此问题的其他人或设置可能会导致此问题。是什么导致此问题,如何解决此问题,以便始终保持闪烁的块光标样式?
终端功能并非在所有终端上都可用,并且可能会随tmux版本的不同而不同。我在Debian 7上看到了tmux 1.6中引用的描述。Ubuntu14.04有点旧了,并且具有tmux 1.8(相同的描述)。
手册页中给出的示例看起来像DECSCUSR
,xterm
从2009年的252号补丁开始就受支持。请参阅XTerm控制序列:
CSI Ps SP q
Set cursor style (DECSCUSR, VT520).
Ps = 0 -> blinking block.
Ps = 1 -> blinking block (default).
Ps = 2 -> steady block.
Ps = 3 -> blinking underline.
Ps = 4 -> steady underline.
Ps = 5 -> blinking bar (xterm).
Ps = 6 -> steady bar (xterm).
要使用它们,您可以使用ncurses的tic来修改terminfo条目,例如,
infocmp -x >foo
vi foo
tic -x foo
添加此行(与其他功能一样,带有前导标签):
Cs=\E[%p\sq, Csr=\E[0\sq,
但是,在检查源代码中是否存在tmux 2.1时,它不再读取这些terminfo功能,并且已被修改为使用Cs
和Cr
设置颜色(在较早的版本中使用Cc
和来完成Cr
)。较新的版本具有内置逻辑,可在DECSCUSR
没有terminfo扩展名的情况下进行识别。
基于VTE的终端(例如XFCE终端)可以(取决于版本)实现DECSCUSR
,但是Linux控制台不太可能这样做,因为它仅实现DECSCUSR
来自VT520
终端的VT220的子集(VT220的超集)。
您将看到与emacs之类的其他应用程序的不同之处,因为它们DECSCUSR
与其他光标样式的功能(例如闪烁的光标功能)重叠,cvvis
并cnorm
通过terminfo的和功能设置或重置为xterm
:
CSI ? Pm h
DEC Private Mode Set (DECSET).
Ps = 1 2 -> Start Blinking Cursor (att610).
但是,您似乎想在Linux控制台(也称为虚拟控制台)中修改光标外观。DECSCUSR
在那里没有效果。
要使光标始终处于闪烁状态,您必须在所使用的终端说明中更改光标外观的功能。这些是civis
(使光标不可见),cnorm
(使光标为“正常”外观)和cvvis
(使光标非常可见):
\e[?8c
在“ linux”条目中同时使用这两个条目将使诸如emacs之类的程序使用该条目来使用闪烁的框光标。cnorm
和civis
。由于您正在使用tmux
,因此您可能还必须修改xterm
(以便内部运行的应用程序tmux
使用该光标样式)。但是首先要进行测试:如果必须,可以将结合\e[?8c
使用现有的cnorm
字符串,因为xterm
ignores \e[?8c
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句