使用 terminfo 仅重置前景色
Reset only the foreground color using terminfo
通过在终端中使用 ANSI 序列 Esc[39m
,可以在不改变其他属性(如粗体、下划线或背景颜色)的情况下清除前景色。例如:
echo -e "\e[31;1mRed and bold.\e[39m Bold only."
我想从 terminfo 功能中检索此序列,但找不到;当尝试使用 setaf 9
时,它会通过给出序列 Esc[91m
:
来切换到亮色
$ tput setaf 1 | xxd
00000000: 1b5b 3331 6d .[31m
$ tput setaf 9 | xxd
00000000: 1b5b 3931 6d .[91m
我发现重置前景色的唯一功能是 sgr0
,但它也会重置所有其他属性。
是否可以从 terminfo 访问这些功能?
- 默认前景
Esc[39m
;
- 默认背景
Esc[49m
;
您必须自己定义它。 X/Open doesn't define it, and there's no established use for it. Assuming you're using ncurses (which is extensible),这可以通过修改终端描述并为其创建您自己的名称来完成,例如,
infocmp -x > myinfo.src
printf '\tresetf=\E[39m,\n' >> myinfo.src
tic -x myinfo.src
(通常会在 $HOME/.terminfo/
中创建 你的 副本)。
通过在终端中使用 ANSI 序列 Esc[39m
,可以在不改变其他属性(如粗体、下划线或背景颜色)的情况下清除前景色。例如:
echo -e "\e[31;1mRed and bold.\e[39m Bold only."
我想从 terminfo 功能中检索此序列,但找不到;当尝试使用 setaf 9
时,它会通过给出序列 Esc[91m
:
$ tput setaf 1 | xxd
00000000: 1b5b 3331 6d .[31m
$ tput setaf 9 | xxd
00000000: 1b5b 3931 6d .[91m
我发现重置前景色的唯一功能是 sgr0
,但它也会重置所有其他属性。
是否可以从 terminfo 访问这些功能?
- 默认前景
Esc[39m
; - 默认背景
Esc[49m
;
您必须自己定义它。 X/Open doesn't define it, and there's no established use for it. Assuming you're using ncurses (which is extensible),这可以通过修改终端描述并为其创建您自己的名称来完成,例如,
infocmp -x > myinfo.src
printf '\tresetf=\E[39m,\n' >> myinfo.src
tic -x myinfo.src
(通常会在 $HOME/.terminfo/
中创建 你的 副本)。