emacs 控制台模式 Org-mode 删除线未按预期显示

Posted

技术标签:

【中文标题】emacs 控制台模式 Org-mode 删除线未按预期显示【英文标题】:emacs console mode Org-mode strike-through is not displayed as expected 【发布时间】:2014-08-02 19:40:28 【问题描述】:

我正在使用组织模式。在文本周围使用“+”,它会在 GUI 中正确显示为删除线文本(例如:+striked-through+)。

但这在emacs控制台模式下不起作用,文本不显示划线:与默认面没有区别。

我的术语知道如何显示删除线,因为它通过此测试正确显示删除线文本:

echo -e "\e[9mtest\e[0m"

所以这似乎是 emacs 没有使用 SGR 代码将文本呈现为删除线。

您知道有什么方法可以告诉 emacs 在控制台中使用删除线吗?还是我这边没有设置好东西?

【问题讨论】:

【参考方案1】:

(Linux) 虚拟控制台不实施删除线。一些终端仿真器会执行此操作,但通常那些不称为“控制台”。最多,emacs 可以显示一些 other 类型的突出显示,例如颜色。

删除线转义序列的参考是 ECMA-48。但是,请记住,它是由一个委员会创建的,并不代表 现有 实践。相反,它是现有和提议实现的框架。其中描述的许多功能(30 年后)尚未实现。您不会发现删除线作为标准的 terminfo(或 termcap)功能,仅仅是因为很少(如果有)终端实现了该功能。阅读terminfo(5):没有为此目的定义能力。

如果您阅读 emacs 的源代码,很容易看出它不支持删除线。用于终端 term.c 的 emacs 驱动程序使用 termcap 并在 bitmask 中列出支持的视频属性:

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 (see code) 检索许多字符串功能。那里没有删除线。虽然 emacs hardcodes some of the color 转义(以解决 termcap 的限制),但驱动程序不包含任何可以删除的内容。

进一步阅读:

console_codes - Linux console escape and control sequences Why doesn't xterm support italics? (since 2014, xterm) [vte/vte-next] emulation: Support italic text(自 2012 年起,vte)

【讨论】:

谢谢,完美的答案。 这个出色的答案启发了我 patch Emacs 28 支持在 TTY 帧上使用删除线属性渲染面部。值得注意的是,既然这是写的,我们现在有了smxx terminfo/termcap 属性。感谢 Dickey 先生在 xterm/terminfo/termcap 上的出色写作和工作!

以上是关于emacs 控制台模式 Org-mode 删除线未按预期显示的主要内容,如果未能解决你的问题,请参考以下文章

在 emacs 中混合 org-mode 和 c-mode

Emacs,org-mode,evil-mode - TAB键不起作用

在 emacs 中使用 org-mode 表使用 calc 转换单位

如何在 Emacs 中禁用自动填充模式?

org-mode入门教程

用Org-mode管理emacs配置