2010-03-24 65 views
12

有没有办法确定终端的背景颜色?

我想知道是否有任何的方式来确定终端的背景颜色(如果这个问题属于这里或超级用户不知道)?

在我的情况下,使用gnome-terminal。
它可能很重要,因为它完全取决于终端应用程序来绘制它的窗口的背景,它甚至可能不是纯色。

回答

4

我想出了以下内容:

#!/bin/sh 
# 
# Query a property from the terminal, e.g. background color. 
# 
# XTerm Operating System Commands 
#  "ESC ] Ps;Pt ST" 

oldstty=$(stty -g) 

# What to query? 
# 11: text background 
Ps=${1:-11} 

stty raw -echo min 0 time 0 
# stty raw -echo min 0 time 1 
printf "\033]$Ps;?\033\\" 
# xterm needs the sleep (or "time 1", but that is 1/10th second). 
sleep 0.00000001 
read -r answer 
# echo $answer | cat -A 
result=${answer#*;} 
stty $oldstty 
# Remove escape at the end. 
echo $result | sed 's/[^rgb:0-9a-f/]\+$//' 

源/回购/要点:https://gist.github.com/blueyed/c8470c2aad3381c33ea3

+0

这似乎不适用于gnome-terminal 3.6.2。 – aramadia 2015-09-19 00:05:44

0

您的意思是确定终端背景颜色或设置终端颜色的方法吗?

如果后者可以查询终端的PS1环境变量以获取颜色。

有在这里设置(等衍生)的终端颜色的一篇文章:从apparently rxvt-only $COLORFGBG http://www.ibm.com/developerworks/linux/library/l-tip-prompt/

+0

我的意思是,以确定背景颜色。不是用于打印字符的颜色(使用转义码),而是窗口本身。 不错的文章,但是:) – 2010-03-24 13:19:21

1

除此之外,我不知道任何东西,甚至存在。大多数人似乎referring to如何vim does it,甚至是最好的教育猜测。

11

有此一xterm control sequence:(\e\a是ESC和BEL字符,分别地)

\e]11;?\a 

的Xterm兼容终端应具有相同序列回复,用问号取而代之的是X11 colorspec,例如黑色的rgb:0000/0000/0000

+1

有关如何利用这一点的信息将是一个很好的补充。 (例如,根据shell的背景颜色,用不同的前景颜色打印一个单词的shell脚本片段?) – ELLIOTTCABLE 2015-02-10 00:52:19

+0

(另外,我怀疑这只会获得*文本的背景颜色*,如果关闭了。不是实际终端窗口的背景颜色,我怀疑在'rxvt'之外仍然无法获得。) – ELLIOTTCABLE 2015-02-10 01:00:25

+0

在Mac 10.10.4中,这个(和@ blueyed的类似答案)在Apple Terminal中似乎不起作用它将自己标识为xterm-color),但在常规的xterm中工作。 – TextGeek 2015-07-29 16:44:03

相关问题