Emacs控制台模式下Org-mode中的删除线未按预期显示。

9
我正在使用org-mode。在文本周围使用“+”,可以在GUI中正确显示为删除线文本(例如:+划掉的文本+)。
但是,在emacs控制台模式下,这种方法不起作用,文本没有被显示为删除线:与默认字体没有区别。
我的终端知道如何显示删除线,因为它可以正确显示带有删除线的文本。
echo -e "\e[9mtest\e[0m"

看起来这是emacs没有使用SGR代码来呈现文本为删除线。

你知道有什么方法告诉emacs在控制台中使用删除线吗?或者是我的设置出了问题吗?

1个回答

5

(Linux)虚拟控制台不支持删除线。一些终端仿真器可以实现这个功能,但通常不会被称为“控制台”。最多,Emacs可以显示一些其他类型的突出显示,例如颜色。

删除线转义序列的参考是ECMA-48标准。然而,请记住它是由一个委员会创建的,并不代表已经存在的实践。相反,它是现有和提出的实现的框架。其中许多特性在30年后仍未得到实现。您将无法在标准terminfo(或termcap)能力中找到删除线,因为很少有终端实现了此功能。请阅读terminfo(5):没有为此目的定义任何能力。

如果您阅读emacs的源代码,很容易发现它不支持删除线。emacs的终端驱动程序term.c使用termcap并在位掩码中列出支持的视频属性:
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的限制),但驱动程序中没有任何会产生删除线的内容。
更多阅读:

1
谢谢,完美的答案并附有来源。 - vaab
2
这个优秀的答案激励我打了补丁,让 Emacs 28 支持在 TTY frames 上显示带有删除线属性的 faces。值得注意的是,自从这篇文章写出来以后,我们现在有了smxx 的 terminfo/termcap 属性。感谢 Dickey 先生在 xterm/terminfo/termcap 上所做的所有出色的工作和写作! - spud

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接