我在 Windows 笔记本电脑上的 cygwin 中使用 bash。我希望能够将终端的背景颜色更改为绿色(实际颜色无关),为此我可以使用以下任一命令:
tput setb 2; echo
printf '\e]11;#00FF00\a'
有关其printf
功能的更多信息,请参阅如何设置 Linux 控制台屏幕的背景颜色,背景的具体用法11
记录在https://invisible-island.net/xterm/ctlseqs/ctlseqs.pdf(Ps = 1 0 → Change VT100 text foreground color to Pt.
和Ps = 1 1 → Change VT100 text background color to Pt.
)的第 34 页中。
立即printf
更改整个终端的背景,而tput
仅设置接下来输入的颜色,因此echo
从下一个空行开始,但我不太关心这些。我最关心的是以下内容:
留下tput
了原始背景颜色的小边框(浅米色,通过单击终端左上角的“选项”GUI 设置),如下图所示(图像左下角周围的浅灰色是我的 Windows 桌面颜色):
改变printf
边框的颜色(与 相比,它是较浅的绿色,tput
但这并不重要):
但它不会改变设置的背景区域,tput
除非我首先重新初始化原来的操作tput
,tput init; echo
然后执行printf
:
printf
只要我不先使用,我就可以使用它来获得我想要的东西tput setb
,但我更愿意只在可以移植的情况下使用tput setb
,那么 - 为什么要tput
留下现有背景颜色的小边框,有什么方法可以告诉tput
以不留下小边框的方式设置背景颜色?
我还想知道是否有办法tput
立即设置整个终端背景,printf
而不是在我输入下一个字符串之后,但这并不像摆脱边框那么重要。
现在@MarcusMüller在评论中向我暗示这可能是一个mintty
问题 -
git bash
当我在另一台机器上使用 Windows 时,我看到了同样的行为。它们显然都用作mintty
终端仿真器。由于我必须登录到许多不同的 Windows 机器并使用cygwin
或git bash
,我希望能够解决这个问题,而不必每次使用其中一台机器时都更改终端仿真器(我甚至不确定是否/如何做到这一点)。事实上,如果要通过更改终端仿真器来解决问题tput
,我只会使用这种printf
方法。
我在set-border-width-for-mintty-window-on-cygwin-windows-10中找到了一种方法,通过~/.minttyrc
设置Padding
变量来控制边框宽度,如果我将其更新为:
Padding=0
那么这确实可以解决上述tput
问题,但是
- 这意味着我必须
.minttyrc
在每台登录的机器上更改,然后重新启动终端,并且 - 当我打开“选项”GUI 来更改有关终端的任何内容然后保存时,它会覆盖该
.minttyrc
文件并删除Padding
设置
所以我仍然想找到某种方法来简单地告诉tput
填充该“填充”区域,就像填充背景的其余部分一样。
@Vilinkameni还在评论中指出,tput
在 a mintty
andMSYS2 MINGW64
终端中使用上述命令时,任何ls --color
使用颜色的后续命令或其他命令进行的 ANSI SGR 颜色切换都会有效地再次重置颜色。如果我使用上述命令,则不会发生这种情况,printf
因此我可能会在后续问题中询问。
另请参阅底部的“更改颜色” https://code.google.com/archive/p/mintty/wikis/Tips.wiki#Changing_colours,了解有关上述内容printf
和其他相关内容的更多信息mintty
。我的$TERM
值是xterm
。