2

我正在使用urwid 来设计一个curses ui。我可以使用显示属性来显示粗体、下划线或突出显示的文本。可以使用斜体吗?

4

1 回答 1

1

简短的回答

理论上,是的。

在实践中:还没有。

长答案

基本上,curses 使用 ECMA-48 中所谓的“ANSI 转义序列”来进行光标移动、颜色或任何非纯线性文本输出。(它确实比这更令人费解,参见 terminfo,但这就是它最终归结为的原因。)

颜色、粗体文本等被指定为 SGR('Select Graphic Rendition')命令的一部分:(CSI $n m作为CSI'Control Sequence Introducer' ^[[,即ESC+ [)。在一系列令人费解的奇怪事物中(甚至支持blackletter!在控制台上!),斜体文本有一个控制序列:启用^[[3m^[[23m禁用。

维基百科有一个SGR 命令列表。然而,大多数更……深奥的序列“几乎不被支持”。粗体和突出几乎得到普遍支持,下划线很常见。虽然斜体似乎越来越受欢迎,但许多(?)终端仿真器仍然不支持它——如果您的程序需要在异构环境中运行,这可能是一个问题。最好不要对即将到来的黑信支持下任何赌注。

目前,xterm、urxvt 和 st 确实支持它;腻子没有。

如果您的终端支持它,您可以自己尝试。您必须使用Ctrl+V+Esc来获得一个“真正的”转义字符而不是^[,这只是一个符号速记。

print 'plain text ^[[3m italic text ^[[0m plain text'

ncurses 似乎已经支持斜体文本。 然而,Urwid 还没有(从 1.3.0 版开始)。我查看了源代码(有趣的部分是display_common.pycurses_display.pyraw_display.py。我想修补对斜体文本的支持应该不会太难,但作为一个 Urwid 初学者,我现在对我来说是遥不可及的。

于 2014-11-16T15:16:52.520 回答