进一步阅读

进一步阅读

我想更改各种(模拟)终端中光标的形状。

我想要的形状是⼕(抱歉,如果它没有渲染)。这是一个向右打开的三边盒子。这样我就可以看到插入的位置,还可以看到光标位于“on”上的字符。我在 Unicode 中发现该字符位于 U+2F15。

我绝对希望能够在 Linux 的内核虚拟终端(即通过Control+ Alt+获得的)和 GUI 终端模拟器(例如 XTerm 和 RXVT)中执行此操作。如果可能的话,我什至想在 PuTTY 和 KiTTY 等网络终端中执行此操作。如果我不能得到那个确切的字符,我至少想要那个三行FN形状

我知道这将涉及“ANSI”转义码或(可能)终端仿真器中的设置(尽管考虑到这不适用于 Linux 内置终端仿真器,这不是可取的)。请提供一个不依赖于使用任何特定 shell 的答案。在不改变内核代码的情况下这是否可能?

答案1

虚拟终端和真实终端中可用的光标形状是有限的。一般来说,它们只启用与旧显示硬件相匹配的设置形状,通常只允许指定闪烁周期以及光标选通时的开始和结束扫描线,有时仅是开始+结束组合的非常有限的子集(例如下划线) 、上划线、半高、块)。

两个主要的控制序列是 DECSCUSR 和 LINUXSCUSR。 DECSCUSR 是 DEC 的控制序列名称,DEC 在其后来的终端系列中支持该控制序列。与其他真实终端制造商一样,DEC 在其文档中给出了以“DEC”开头的供应商私有控制序列名称。 (在其 doco 中,泰克使用“TEK”前缀来命名其供应商私有控制序列,以进行比较。)Linux doco 与往常一样非常糟糕,并且没有命名内容。所以“LINUXCUSR”是我的造词,以此类推,加上“LINUX”前缀。

DECSCUSR 和 LINUXSCUSR 都不是标准化的。它们彼此不同,但发明的时间大致相同(仅在 20 世纪 90 年代的 DEC VT 5xx 中出现),因此不存在通常情况下的 DEC 现有技术。 ☺ Egmont Koblinger 在其他地方评论说,两者的模型都令人印象深刻,因为它将眨眼与形状混为一谈。还有一些关于更改 DECSCUSR 0 的含义以启用用户指定形状的讨论。并且 Microsoft Terminal 突出显示了 DECSCUSR 模型与 Win32 中使用的模型之间的不匹配安慰机制,它允许任意起始行长达三十年(如果考虑到 OS/2 1.x 的 VIO 子系统和 PC/AT 视频固件中的前辈,则为四十年)。

结果是没有一个通用的控制序列,目前世界分为 DECSCUSR 和 LINUXSCUSR 阵营,因为几乎没有终端仿真器支持这两种序列。此外,使用这两种方法,您根本无法获得所需的灵活性。与开始+结束扫描线模型唯一普遍存在的偏差是垂直条,并且只能通过某些 GUI 终端仿真器(例如 XTerm)获得,该仿真器添加了其他形状如 DECSCUSR 5 和 DECSCUSR 6。

是的,您可以修改 FreeBSD 内核、NetBSD 内核、OpenBSD 内核和 Linux 内置终端仿真器以及各种应用程序模式终端仿真器(framebuffer 和 X11 GUI)的代码来实现更多光标形状。不过,要使其通用是相当困难的。

我已经这样做了我的终端模拟器。 DECSCUSR 7/8 是一个轮廓框。 DECSCUSR 9/10 是一颗明星。 DECSCUSR 11/12 为下划线+上划线。 DECSCUSR 13/14 是倒“L”形状。根据阅读一些 20 世纪 70 年代的旧文献,我一直在考虑添加方括号和仅上划线两种方向。但是 DECSCUSR 并不容易适合您正在寻找的实际 Unicode 字符的任意规范。 LINUXSCUSR 不符合这个想法根本不, 而且。

进一步阅读

相关内容