【问题标题】:Get current terminal color pair in Perl在 Perl 中获取当前终端颜色对
【发布时间】:2011-06-26 16:22:09
【问题描述】:

我正在尝试了解终端窗口中的彩色文本。 (如果我在 OS X 上使用 Terminal.app 很重要。)我想获取终端当前的前景色和背景色对。看起来我应该能够使用 Term::Cap 库在 perl 脚本中获取此信息,但解决方案却让我望而却步。

在 perl 脚本中如何查询终端当前的前景色和背景色对值?

【问题讨论】:

    标签: perl termcap


    【解决方案1】:

    该功能超出了 terminfo 和 termcap 的范围,因为它处理终端响应,而 terminfo/termcap 描述了这些功能:

    • 如何告诉终端做一些常用的功能(比如清屏),或者
    • 某些特殊键(例如Home)可能从键盘发送什么字符序列。

    虽然原则上没有限制可以作为终端描述的一部分,但早在 1980 年代,终端之间的响应几乎没有共同点。一些终端可以报告特定功能,其中大部分是不变的(例如,版本信息)。在 terminfo/termcap 或多或少地在 X/Open 诅咒中固化之后,大多数可变响应出现了。 ncurses extends that,但同样,大多数扩展都是功能特殊键

    Terminal.app 实现了 xterm 最常用的功能,但(与其他模仿者一样)省略了大部分终端响应。除此之外,xterm 提供终端响应,可以告诉应用程序当前窗口的颜色是什么。有几个命令行实用程序(xtermsetxtermcontrol)是为了使用这些信息而编写的(同样,它们只涵盖了部分功能)。使用 xtermcontrol 表明 Terminal.app 在这方面缺乏——见截图:

    【讨论】:

      【解决方案2】:

      我认为大多数终端不支持报告这一点——而且它看起来不像 termcap 或 terminfo 有任何条目。您只需要根据需要设置颜色对,而不是询问终端现在设置的内容。在 ECMA-48 标准(在 ANSI X3.64 之后更广为人知的“ANSI”,它曾经存在的地方)中,唯一引用颜色的命令是 SGR“Set Graphic Rendition”,它纯粹是只写的。

      【讨论】:

      • 我认为你是对的。我确实阅读了很多手册页并得出相同的结论,即当前颜色对是只写属性,但由于终端编程对我来说是全新的,我想问一下,以防我错过了什么。感谢您的帮助。
      【解决方案3】:

      不知道 perl 或 Terminal.app,但如果您分别输出 "\033]10;?\07""\033]11;?\07",xterm 等会将前景/背景颜色控制序列写入标准输入。尤其是http://invisible-island.net/xterm/ctlseqs/ctlseqs.htmlhttp://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Operating-System-Controls

      【讨论】:

        猜你喜欢
        • 2015-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-19
        • 1970-01-01
        • 2015-05-18
        • 2019-03-07
        相关资源
        最近更新 更多