获取Perl中的当前终端颜色对

问题描述 投票:3回答:3

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

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

perl termcap
3个回答
2
投票

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

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

虽然原则上对终端描述中可能存在的内容没有限制,但在20世纪80年代,各种终端之间几乎没有共同点用于响应。一些终端可以报告特定功能,其中大多数是恒定的(例如,版本信息)。大多数变量响应来自terminfo / termcap在X / Open Curses中或多或少地固化。 ncurses extends that,但是,大多数扩展都是功能或特殊键。

Terminal.app实现了xterm最常用的功能,但(像其他模仿者一样)省略了大多数终端响应。除此之外,xterm提供终端​​响应,可以告诉应用程序窗口的颜色当前是什么。有几个命令行实用程序(xtermsetxtermcontrol)已被编写以使用此信息(并且再次,它们仅涵盖该组成部分的一部分)。使用xtermcontrol演示了Terminal.app在这个领域缺乏 - 见截图:

screenshot showing Terminal.app vs xterm using xtermcontrol


2
投票

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


1
投票

关于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

© www.soinside.com 2019 - 2024. All rights reserved.