如何以仅利用终端协议而不依赖于存储在特定终端程序或其运行环境中的任何配置(如“配置文件”)的方式更改终端背景颜色?
我希望能够编写一个脚本,该脚本可以可靠地更改使用终端登录计算机并执行脚本的用户的终端背景颜色。
对“这是不可能的”效果的快速而权威的回答将与解决方案一样受到赞赏。然而,只有完全了解终端协议并且可以证明不存在这种功能的专家才会接受这样的答案。
答案1
这是不可能的。我不是一个完全了解终端协议的专家,但我知道存在无法更改背景颜色的终端。例如,在哑终端(例如由预计或者M-x shell
在 Emacs 中。大多数硬件终端也是如此,但现在很少有人使用。
大多数终端模拟器确实有办法更改背景颜色。终端仿真器基本上复制了 xterm 作为应用程序和终端之间的接口,因此当您需要这样的功能时,请尝试 xterm 方式并期望它可以在某些但不是所有终端仿真器上工作。查找xterm 控制序列看看是否符合您的要求。
要更改整个终端的背景颜色,有OSC 11; color BEL
, IE
printf '\e]11;%s\a' "$color"
这适用于 xterm、urxvt、gnome-terminal、konsole 和 lxterm,但不适用于 rxvt、xfce4-terminal、terminator 或 Emacs M-x term
。背景颜色变化在终端重置后仍然存在。您还可以通过替换11;
为 来更改前景色10;
。
当然,这是默认的背景颜色。在任何支持此转义序列的终端以及以任何方式支持颜色的大多数其他终端上,您可以使用\e[41m
(红色)切换随后显示的文本的背景颜色。
如果终端不支持转义序列,那么您将无法找到答案。您可以尝试查找查询终端并且在同一组终端中受支持的转义序列,但通常没有这样的序列。
切换到反向视频\e[?5h
可能适用于大多数终端,但这在终端重置后无法保留。您可以这样做,然后设置前景色,这样在大多数终端上都会有视觉效果。