![将终端 256 调色板重置为默认值](https://linux22.com/image/1140345/%E5%B0%86%E7%BB%88%E7%AB%AF%20256%20%E8%B0%83%E8%89%B2%E6%9D%BF%E9%87%8D%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E5%80%BC.png)
假设有东西破坏了默认的 256 色调色板。例如,选择颜色 108:
printf "\033]4;108;rgb:ff/00/00\033\\"
我该如何撤消此操作?我搜索了所有当前“重置终端”问题,并尝试过:
reset # You can't see this in the screenshot as it clears the screen
tput init
tput sgr0
printf '\e[0m'
用一个测试模式我们可以清楚地看到颜色#108仍然被破坏:
我正在运行 GNOME 终端。
我不想要做类似的事情gconftool --recursive-unset /apps/gnome-terminal
,因为这会扰乱所有 open/new 的通用终端配置(例如字体)gnome-terminal
。这太过笼统了。
我如何能,从终端内的命令行:
- 将特定调色板颜色恢复为其默认值?
- 将所有调色板颜色恢复为默认值?
由于该问题可以通过发出控制代码来创建,因此我希望它也可以通过使用控制代码来解决。
答案1
不要使用 4,而要使用 104 来重置特定颜色,例如示例中的颜色编号 108:
printf "\033]104;108\033\\"
省略颜色编号以重置整个调色板(全部 256 种颜色):
printf "\033]104\033\\"
注意:GNOME 终端(实际上是 VTE)使用两种“级别”的颜色。通过 VTE 的 API 设置的颜色(或者在 GNOME 终端的情况下,在“首选项”对话框中选择并存储在 gsettings/dconf 中的前 16 种颜色,其余的是 VTE 的硬编码默认值)具有较低的优先级。对于每个插槽,可能的转义序列具有较高的优先级并暂时覆盖此值。带有“104”参数的上述转义序列“重置”,即清除通过转义序列“4”指定的值,从而恢复为 GNOME 终端的首选项对话框中指定的值(或 VTE 的扩展 256 色调色板的默认值)。由于这种设计,gsettings 或 dconf 命令绝对不可能恢复颜色更改转义序列的效果。其他非基于 VTE 的终端仿真器可能采用不同的方法,或者可能根本不支持这些转义序列。