我正在尝试了解终端窗口中的彩色文本。(如果我在 OS X 上使用 Terminal.app 很重要。)我想获取终端当前的前景色和背景色对。看起来我应该能够使用 Term::Cap 库在 perl 脚本中获取此信息,但解决方案让我望而却步。
在 perl 脚本中,我将如何查询终端当前的前景色和背景色对值?
我认为大多数终端不支持报告这一点——而且它看起来不像 termcap 或 terminfo 有任何条目。您只需要根据需要设置颜色对,而不是询问终端现在设置的内容。在 ECMA-48 标准中(在 ANSI X3.64 之后更好地称为“ANSI”,它曾经存在于此),唯一引用颜色的命令是 SGR“Set Graphic Rendition”,它纯粹是只写的。
该功能超出了 terminfo 和 termcap 的范围,因为它处理终端响应,而 terminfo/termcap 描述了这些功能:
虽然原则上对终端描述的一部分没有限制,但早在 1980 年代,终端之间的响应几乎没有共同点。少数终端可以报告特定功能,其中大部分是不变的(例如,版本信息)。在 terminfo/termcap 或多或少地在 X/Open 诅咒中固化之后,大多数可变响应出现了。 ncurses 扩展了它,但同样,大多数扩展要么是features要么是special keys。
Terminal.app 实现了最常用的功能xterm
,但(与其他模仿者一样)省略了大部分终端响应。除其他外,xterm
提供终端响应,可以告诉应用程序当前窗口的颜色是什么。已经编写了几个命令行实用程序(xtermset
和)来使用这些信息(同样,它们只涵盖了部分内容)。xtermcontrol
使用xtermcontrol
证明 Terminal.app 在这方面是缺乏的——见截图: