如何使用 curses 显示预着色字符串?

How to display pre-colored string with curses?

我正在 Python 中编写 curses 程序。我是 curses 的初学者,但我使用终端控制序列进行彩色输出。

现在 window 中有一些代码片段要打印,我希望它们的语法高亮显示,最好使用像 pygments 这样的库来完成,它输出带控制序列的高亮代码。

最初我直接将 pygments 输出提供给 window.addstr(),但事实证明控制序列被转义并且整个突出显示的字符串都打印在屏幕上(就像这样:https://too-young.me/web/repos/curses-highlight.png) .怎么直接用curses显示,就像cat?

这个问题已经被问过好几次了,答案都是一样的:你可以写一个解析器来做这个。相关讨论:

例如,它不适合作为 ncurses 的扩展,因为:

  • curses 产生 转义序列,但适用于多种设备(可能不是 "ANSI color escapes")。
  • ncurses(参见 FAQ Why aren't my bugs being fixed?)不提供它作为扩展,因为这种类型的解析器不依赖于 ncurses 的任何内部结构。

GitHub 上有一个免费使用、研究、修改和重新分发的高级 GUI 库,位于“https://github.com/rigordo959/tsWxGTUI_PyVx_Repository”。

它是在 Python 2x 和 3x 中使用 "curses" 低级 GUI 包实现的。 Linux nCurses 实现通常取代了原始的 Unix Curses 实现。

您的应用程序可以使用像素模式 "wxPython" 高级 GUI API 的字符模式子集进行编程。它支持带有键盘和鼠标输入的显示器以及各种终端仿真器,包括彩色 xterms(8 色 64 色对和 16 色 256 色对)和非彩色 vt100/vt220.

Curses 使您能够通过在文本前插入一个属性(用于颜色、下划线、粗体、反转等)标记来为文本字符串着色,并在文本后插入一个标记以恢复先前的属性。例如:

sampleWindow.attron(curses.A_REVERSE | 
                    curses.color_pair(color_pair_number))
sampleWindow.addstr(begin_y + 3,
                    begin_x + 48,
                    '        ')
sampleWindow.attroff(curses.A_REVERSE |
                     curses.color_pair(color_pair_number))

"culour" python 模块正是这样做的。

使用pip install culour安装它,然后你就可以用它来打印预先着色的字符串:

import culour
culour.addstr(window, colored_string)

这将打印在 window 中着色的字符串。