【发布时间】:2014-10-05 21:46:46
【问题描述】:
我正在使用urwid 来设计一个curses ui。我可以使用显示属性来显示粗体、下划线或突出显示的文本。可以用斜体吗?
【问题讨论】:
我正在使用urwid 来设计一个curses ui。我可以使用显示属性来显示粗体、下划线或突出显示的文本。可以用斜体吗?
【问题讨论】:
理论上是的。
在实践中:还没有。
基本上,curses 使用 ECMA-48 中所谓的“ANSI 转义序列”来进行光标移动、颜色或任何非纯线性文本输出。 (确实比这更令人费解,参见 terminfo,但这就是它最终归结为的原因。)
颜色、粗体文本等被指定为 SGR(“选择图形再现”)命令的一部分:CSI $n m(CSI 是“控制序列引入器”^[[,即ESC +[)。在一系列令人费解的怪异事物中(甚至支持 blackletter!在控制台上!),是斜体文本的控制序列:^[[3m to启用,^[[23m 禁用。
维基百科有一个list of SGR commands。然而,大多数更……深奥的序列“几乎不被支持”。粗体和突出几乎得到普遍支持,下划线很常见。虽然斜体似乎越来越受欢迎,但许多(?)终端仿真器仍然不支持它——如果您的程序需要在异构环境中运行,这可能是一个问题。最好不要对即将推出的黑信支持下任何赌注。
目前,xterm、urxvt 和 st 都支持它; PuTTy 没有。
如果您的终端支持,您可以自己尝试。您必须使用 Ctrl+V+Esc 来获得一个“真正的”转义字符,而不是 ^[,这只是一个符号简写。
print 'plain text ^[[3m italic text ^[[0m plain text'
ncurses already seems to support italic text. Urwid 还没有(从 1.3.0 版开始)。我查看了源代码(有趣的是display_common.py、curses_display.py 和raw_display.py)。我想修补对斜体文本的支持应该不会太难,但作为一个 Urwid 初学者,我现在对我来说是遥不可及的。
【讨论】: