Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何更改当前光标位置指示器的颜色?_Linux_Perl_Console_Terminal_Terminal Color - Fatal编程技术网

Linux 如何更改当前光标位置指示器的颜色?

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; 如果更改打印文本的颜色,则可以更改光标的颜色

当我打开一个终端时,我有一个带有白色字符的黑色背景。我还有一个绿色占位符,向我指示光标当前所在的位置

在终端中运行的任何perl脚本中,此行为都是相同的

如何在脚本中更改光标指示器的颜色(具体来说,我希望它消失一段时间,然后再回来)


我正在使用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
byte3
c'

字节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