Linux 如何更改当前光标位置指示器的颜色?
当我打开一个终端时,我有一个带有白色字符的黑色背景。我还有一个绿色占位符,向我指示光标当前所在的位置 在终端中运行的任何perl脚本中,此行为都是相同的 如何在脚本中更改光标指示器的颜色(具体来说,我希望它消失一段时间,然后再回来)Linux 如何更改当前光标位置指示器的颜色?,linux,perl,console,terminal,terminal-color,Linux,Perl,Console,Terminal,Terminal Color,当我打开一个终端时,我有一个带有白色字符的黑色背景。我还有一个绿色占位符,向我指示光标当前所在的位置 在终端中运行的任何perl脚本中,此行为都是相同的 如何在脚本中更改光标指示器的颜色(具体来说,我希望它消失一段时间,然后再回来) 我正在使用Linux和bash。您尝试过类似的东西吗 use Term::ANSIColor qw(:constants); print RED, "Danger, Will Robinson!\n", RESET; 如果更改打印文本的颜色,则可以更改光标的颜色
我正在使用Linux和bash。您尝试过类似的东西吗
use Term::ANSIColor qw(:constants);
print RED, "Danger, Will Robinson!\n", RESET;
如果更改打印文本的颜色,则可以更改光标的颜色。 因此,如果不更改正在打印的文本的颜色,就不能简单地更改光标的颜色 但您可以使光标不可见:
system("tput cinvis"); # make cursor invisible
system("tput cnorm"); # make cursor visible
没有便携设备,但某些终端接受转义序列来更改光标颜色 例如
xterm
接受OSC 12
设置颜色
$ echo -e "\e]12;red\a"
简短回答
echo-n-e'\e[?0c'#消失
echo-n-e'\e[?16;0;64c'#重新出现
echo-n-e'\e[?16;0;80c'#重新出现,带高亮显示
长话短说 截至今天,agetty的当前版本(包含在
util-linux 2.27.1
[util-linux是提供大多数核心命令的linux包,如login
,su
,mount
,更多
,kill
,等等),如果您的linux内核版本>=4.4,您应该拥有它)与尚未更新的kernel.org文档()中描述的行为不同
考虑
echo-n-e'\e[?
byte1;
byte2;
byte3c'
字节1:
+---------------+---------------+
|高咬边|低咬边|
+---+-----------+-----------+---+
|msb | | | lsb|
+---+---+---+---+---+---+---+---+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+---+---+---+---+---+---+---+---+
| | | |
| | | +-+
|| | |这些位指定8
||+------+->可能闪烁的硬件插入符号
| | |
| +---------+
|
+--------------->设置时,该位启用SW
插入符号而不是HW插入符号
字节2(SW插入符号):
+------------------>应用了一个非常无用的掩码
|字节3中的位
+---------------+---------------+
|高咬边|低咬边|
+---+-----------+-----------+---+
|msb | | | lsb|
+---+---+---+---+---+---+---+---+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+---+---+---+---+---+---+---+---+
字节3(SW插入符号):
+---------------+---------------+
|高咬边|低咬边|
+---+-----------+-----------+---+
|msb | | | lsb|
+---+---+---+---+---+---+---+---+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+---+---+---+---+---+---+---+---+
| | | |
|| |+------------------>突出显示
| | |
| | +---------------------+
| | |
|+------------------------------+->颜色
| |
+-----------------------------+
高亮显示:高亮显示插入符号下的字符(例如,将其更改为白色[真亮白色]而不是深白色[通常为TTY默认的浅灰色])
颜色:插入符号的颜色。请注意,与我们都知道和喜欢的ANSI颜色代码的通常顺序相比,位是相反的,因此-对于这个三元组-第7位是Lsb,而第5位是Msb
因此,在70年代,ANSI定义了以下颜色代码,为TTY、各种linux终端、控制台等设置了一个普遍采用的事实标准
000(0)黑色
001(1)红色
010(2)绿色
011(3)黄色或深黄色
100(4)蓝色或深蓝色
101(5)品红、紫色或紫罗兰色
110(6)青色或浅蓝色
111(7)白色或深白色(浅灰色)
在这种情况下,我们的情况正好相反
000(0)黑色
100(4)红色
010(2)绿色
110(6)黄色或深黄色
001(1)蓝色或深蓝色
101(5)品红、紫色或紫罗兰色
011(3)青色或浅蓝色
111(7)白色或深白色(浅灰色)
(括号内为八进制值)
因此,以下是清单:
#硬件插入符号(闪烁和[暗]白色)
echo-n-e'\e[?0c'#默认插入符号
echo-n-e'\e[?1c'#不可见插入符号
echo-n-e'\e[?2c'#下划线插入符号
echo-n-e'\e[?3c'#粗下划线插入符号
echo-n-e'\e[?4c'#较小的块插入符号
echo-n-e'\e[?5c'#小方块插入符号
echo-n-e'\e[?6c'#大块插入符号
echo-n-e'\e[?7c'#最大块插入符号
#在我的Linux机器上,6和7都是大的矩形全尺寸块插入符号
#软件插入符号(非闪烁和彩色)
echo-n-e'\e[?16;0;0c'#00001000000000黑色(因此在黑色背景上不可见)
echo-n-e'\e[?16;0;128c'#000010000 10000000红色
echo-n-e'\e[?16;0;64c'#000010000绿色
echo-n-e'\e[?16;0;192c'#000010000 11000000黄色
echo-n-e'\e[?16;0;32c'#0000100001000000蓝色
echo-n-e'\e[?16;0;160c'#000010000 10100000品红
echo-n-e'\e[?16;0;96c'#000010000 01 100000青色
echo-n-e'\e[?16;0;224c'#000010000 11100000暗白色
echo-n-e'\e[?16;0;16c'#0000100001000000黑色+高亮显示
echo-n-e'\e[?16;0;144c'#000010000010001000红色+高亮显示
echo-n-e'\e[?16;0;80c'#000010000 0 01010000绿色+高亮显示
echo-n-e'\e[?16;0;208c'#000010000 11010000黄色+高亮显示
echo-n-e'\e[?16;0;48c'#000010000011000蓝色+高亮显示
echo-n-e'\e[?16;0;176c'#000010000 10110000品红+高亮显示
echo-n-e'\e[?16;0;112c'#000010110000青色+高亮显示
echo-n-e'\e[?16;0;240c'#000010000 11110000暗白色+高亮显示
这在很大程度上取决于您的opera