Ubuntu虚拟终端光标样式重置

尔兹克

我正在运行Ubuntu 14.04,并使用其中一个虚拟终端(TTY [1-6],可通过Ctrl-Alt-F [1-6]访问);我想将光标的外观从表面上的默认值(闪烁的下划线)永久更改为闪烁的框。我可以临时更改它,但是当某些应用程序运行时它会一直重置。

最初,TTY会话中的光标样式是闪烁的下划线。我发现可以使用以下命令将其更改为闪烁的框:

printf '\e[?8c'

这会更改终端中的光标,并反映在emacs或elink之类的程序中。所以我把上面的命令放到我的.bashrc文件中。

但是,某些应用程序似乎将光标样式恢复为闪烁的下划线,并且即使退出这些应用程序后,这种情况仍然存在。我可以通过重新发出上述命令,获取.bashrc或注销并重新登录来将光标样式重置为闪烁的框。

例如,考虑以下三个应用程序(tmux,emacs,elinks)如何影响游标样式:

  • tmux:光标样式立即设置为闪烁的下划线,此样式在tmux内运行的所有应用程序中均保持不变,并且更改在退出tmux后仍然存在。上面的printf命令在tmux中无效。
  • emacs:光标样式是我运行时处于活动状态的样式,然后退出emacs时样式变为闪烁的下划线。
  • elinks:光标样式是我运行时处于活动状态的样式,并且退出elink时光标样式不会更改。

我应该注意,我有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(相同的描述)。

手册页中给出的示例看起来像DECSCUSRxterm2009年的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功能,并且已被修改为使用CsCr设置颜色(在较早的版本中使用Cc和来完成Cr)。较新的版本具有内置逻辑,可在DECSCUSR没有terminfo扩展名的情况下进行识别

基于VTE的终端(例如XFCE终端)可以(取决于版本)实现DECSCUSR,但是Linux控制台不太可能这样做,因为它仅实现DECSCUSR来自VT520终端的VT220的子集(VT220的超集)。

您将看到与emacs之类的其他应用程序的不同之处,因为它们DECSCUSR与其他光标样式的功能(例如闪烁的光标功能)重叠,cvviscnorm通过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之类的程序使用该条目来使用闪烁的框光标。
  • tmux还读取终端条目,查看cnormcivis
  • 另一方面,elink是硬编码的,而忽略了终端数据库。快速阅读其源代码后,我看不到任何会重设终端或修改光标外观的转义序列。

由于您正在使用tmux,因此您可能还必须修改xterm(以便内部运行的应用程序tmux使用该光标样式)。但是首先要进行测试:如果必须,可以将结合\e[?8c使用现有的cnorm字符串,因为xtermignores \e[?8c

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无需重新打开终端即可重置光标状态

来自分类Dev

Ubuntu终端-移至鼠标光标位置

来自分类Dev

Virtualbox Ubuntu切换到虚拟终端问题

来自分类Dev

重置 jmappane 的光标

来自分类Dev

IntelliJ终端光标形状

来自分类Dev

终端中的鼠标光标?

来自分类Dev

在样式化组件内部使用Textarea可以通过重置ReactJS中的光标位置来向后写入

来自分类Dev

Ubuntu 桌面不断“重置”并将我的光标放在屏幕的右下角

来自分类Dev

如何重置终端的颜色?

来自分类Dev

终端设置重置

来自分类Dev

光标在输入的 textarea 开头重置

来自分类Dev

RHEL 7.1虚拟终端

来自分类Dev

虚拟终端的Bashrc

来自分类Dev

如何退出虚拟终端?

来自分类Dev

什么是虚拟终端?

来自分类Dev

重置继承的WPF样式?

来自分类Dev

在*上应用“重置”样式

来自分类Dev

无法重置TD样式

来自分类Dev

重置样式属性

来自分类Dev

OS X终端光标问题

来自分类Dev

获取终端中的光标颜色

来自分类Dev

VS code终端光标效果

来自分类Dev

MacOS 终端 - 错误的光标位置

来自分类Dev

重置Ubuntu

来自分类Dev

游标饼图的光标样式

来自分类Dev

Notepad ++的Vim样式光标移动

来自分类Dev

如何在Ubuntu(16.04)终端中接受虚拟盒许可协议?

来自分类Dev

ubuntu kde终端字体将光标和其他一些字符替换为自定义字体

来自分类Dev

在虚拟终端中交换密钥