3

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

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

4

3 回答 3

2

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

于 2011-02-14T04:08:51.363 回答
2

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

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

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

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

使用 xtermcontrol 显示 Terminal.app 与 xterm 的屏幕截图

于 2017-12-28T15:17:23.983 回答
1

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

于 2015-07-18T19:12:22.743 回答