我正在使用组织模式。在文本周围使用“+”,它会在 GUI 中正确显示为删除线文本(例如:+删除线+)。
但这在 emacs 控制台模式下不起作用,文本不显示删除线:与默认面没有区别。
我的术语知道如何显示删除线,因为它通过此测试正确显示删除线文本:
echo -e "\e[9mtest\e[0m"
所以这似乎是 emacs 没有使用 SGR 代码将文本呈现为删除线。
你知道有什么方法可以告诉 emacs 在控制台中使用删除线吗?或者是我没有设置某些东西?
我正在使用组织模式。在文本周围使用“+”,它会在 GUI 中正确显示为删除线文本(例如:+删除线+)。
但这在 emacs 控制台模式下不起作用,文本不显示删除线:与默认面没有区别。
我的术语知道如何显示删除线,因为它通过此测试正确显示删除线文本:
echo -e "\e[9mtest\e[0m"
所以这似乎是 emacs 没有使用 SGR 代码将文本呈现为删除线。
你知道有什么方法可以告诉 emacs 在控制台中使用删除线吗?或者是我没有设置某些东西?
(Linux) 虚拟控制台不实施删除线。一些终端仿真器会执行此操作,但通常那些不称为“控制台”。最多,emacs 可以显示一些其他类型的突出显示,例如颜色。
删除线转义序列的参考是 ECMA-48。但是,请记住,它是由一个委员会创建的,并不代表现有的做法。相反,它是现有和提议的实现的框架。其中描述的许多功能(30 年后)尚未实现。您不会发现删除线作为标准的 terminfo(或 termcap)功能,仅仅是因为很少(如果有)终端实现了该功能。阅读terminfo(5)
:没有为此目的定义的能力。
如果您阅读 emacs 的源代码,很容易看出它不支持删除线。用于终端的 emacs 驱动程序使用 termcap 并在位掩码term.c
中列出支持的视频属性:
enum no_color_bit
{
NC_STANDOUT = 1 << 0,
NC_UNDERLINE = 1 << 1,
NC_REVERSE = 1 << 2,
NC_ITALIC = 1 << 3,
NC_DIM = 1 << 4,
NC_BOLD = 1 << 5,
NC_INVIS = 1 << 6,
NC_PROTECT = 1 << 7
};
它还使用tgetstr
(参见代码)检索许多字符串功能。那里没有删除线。虽然 emacs对一些颜色转义进行了硬编码(以解决 termcap 的限制),但驱动程序不包含任何可以删除的内容。
进一步阅读: