我正在尝试在终端窗口中了解彩色文本。 (如果重要的是我在OS X上使用Terminal.app。)我想得到终端的当前前景色和背景色对。看起来我应该能够使用Term :: Cap库在perl脚本中获取此信息,但解决方案使我无法解决。
在perl脚本中,如何查询终端的当前前景和背景颜色对值?
该功能超出了terminfo和termcap的范围,因为它处理终端响应,而terminfo / termcap描述了这些功能:
虽然原则上对终端描述中可能存在的内容没有限制,但在20世纪80年代,各种终端之间几乎没有共同点用于响应。一些终端可以报告特定功能,其中大多数是恒定的(例如,版本信息)。大多数变量响应来自terminfo / termcap在X / Open Curses中或多或少地固化。 ncurses extends that,但是,大多数扩展都是功能或特殊键。
Terminal.app实现了xterm
最常用的功能,但(像其他模仿者一样)省略了大多数终端响应。除此之外,xterm
提供终端响应,可以告诉应用程序窗口的颜色当前是什么。有几个命令行实用程序(xtermset
和xtermcontrol
)已被编写以使用此信息(并且再次,它们仅涵盖该组成部分的一部分)。使用xtermcontrol
演示了Terminal.app在这个领域缺乏 - 见截图:
我不认为大多数终端都支持报告这个 - 并且它看起来不像termcap或terminfo有任何条目。您只需要根据需要设置颜色对,而不是询问终端现在设置的颜色。在ECMA-48标准中(在ANSI X3.64之后更为人所知的“ANSI”,以前它曾经存在),唯一引用颜色的命令是SGR“Set Graphic Rendition”,它纯粹是只写的。
关于perl或Terminal.app的Dunno,但是如果分别输出"\033]10;?\07"
或"\033]11;?\07"
,xterm等会将前景/背景颜色控制序列写入stdin。查看http://invisible-island.net/xterm/ctlseqs/ctlseqs.html,特别是http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Operating-System-Controls。