【问题标题】:Forcing ncurses to change the cursor color now现在强制 ncurses 更改光标颜色
【发布时间】:2020-09-27 04:36:26
【问题描述】:

我有一个使用 ncurses 的终端程序,它会定期更改前景色和背景色。不幸的是,光标颜色在终端滚动之前不会改变。 ncurses 在滚动期间做了什么导致 xterm 和其他符合 ANSI 的终端仿真器更改光标颜色?

我的 .Xresources 中有这个:

xterm*cursorColor:      *XtDefaultForeground

我发现了这个:How do I change the cursor color in ncurses forms? 向我展示了更改光标颜色的转义序列,但它没有考虑到光标实际上更亮的事实,因为它是粗体。我可以将我从color_content() 得到的值乘以 1.48,但这让我觉得以后会招来麻烦。
出于某种原因,我无法弄清楚,仅将粗体颜色除以非粗体颜色(使用颜色选择器获得的值)不起作用。结果颜色更亮,但与目标值不匹配,所以我通过反复试验找到了 1.48。

如果我坚持使用转义序列,那没关系,但我想知道一种更简洁的方法来正确加粗颜色。

【问题讨论】:

    标签: terminal ncurses xterm terminal-emulator


    【解决方案1】:

    ncurses 对光标颜色一无所知:终端之间没有共同点来假设可以设置(或控制)光标颜色。

    指示的xterm sequence 可能/可能不被其他终端支持。它恰好修改了将由cursorColor 资源初始化的值:

    指定文本光标使用的颜色。默认是 "XtDefaultForeground"。默认情况下,xterm 会尝试保留此 颜色与背景颜色相同,因为它 通过填充文本单元格的背景来绘制光标。这 同样的限制适用于可能改变的控制序列 这个颜色。

    设置此资源会覆​​盖 xterm 的大部分调整 光标颜色。它仍然会使用反向视频来禁止某些 情况,例如黑色背景上的黑色光标。

    也就是说,默认情况下,xterm 会根据光标当前所在的单元格 调整光标的颜色来尝试保持光标可见。当您在文本字段中移动光标时,这些颜色可能会有所不同,从而导致 xterm 更改光标颜色。

    现在...有一些特殊情况(请参阅 xterm 源代码中的 ShowCursorHideCursor),但基本上它会尝试使用当前单元格的前景色/背景色(反转)。在 ncurses 中,您可以使用inchin_wch 变体之一来获取单元格的当前颜色。返回的数据包括一个颜色对,您可以使用pair_content 从中提取前景/背景的颜色值。将它们反转以生成新的颜色对将很接近(但您已经知道 bold 可以与渲染的颜色交互)。

    【讨论】:

    • 我明白这一点。我所追求的 ncurses 角度正在弄清楚滚动文本时会发生什么,因为那是光标颜色发生变化的时候。由于很明显这是不可能的,我想弄清楚如何可靠、干净地将 ncurses 颜色转换为粗体时的颜色。
    猜你喜欢
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多