emacs控制台模式Org-mode strike-through未按预期显示

vaa*_*aab 7 emacs terminal console org-mode strikethrough

我正在使用org-mode.在文本周围使用"+",它在GUI中正确显示为删除文本(例如:+ striked-through +).

但是这在emacs控制台模式下不起作用,文本不会显示为striked-through:默认面没有区别.

我的术语知道如何显示透视效果,因为它通过此测试正确显示了标记文本:

echo -e "\e[9mtest\e[0m"
Run Code Online (Sandbox Code Playgroud)

所以这似乎是不使用SGR代码将文本呈现为删除线的emacs.

你知道告诉emacs在控制台中使用删除的方法吗?或者在我的结尾是不是设置了什么?

Tho*_*key 5

(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
};
Run Code Online (Sandbox Code Playgroud)

它还使用tgetstr(参见代码)检索许多字符串功能。那里没有删除线。虽然 emacs硬编码了一些颜色转义(以解决 termcap 的限制),但驱动程序不包含任何可以删除的内容。

进一步阅读:

  • 这个出色的答案激励我 [patch](https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=e0e147e10389e407531ca81d0063a11a5716d765) Emacs 28 支持在 TTY 框架上使用删除线属性渲染面孔。值得注意的是,自从编写本文以来,我们现在有了 `smxx` terminfo/termcap 属性。感谢 Dickey 先生在 xterm/terminfo/termcap 上所做的所有出色的写作和工作! (2认同)