如何在 ncurses 中的 mvwprintw 中使用 ANSI 转义码?

tim*_*our 7 ncurses ansi-escape

有没有办法在里面使用 ANSI 转义码mvwprintw

mvwprintw(window, 0, 0,"%c[%dmCOLORED_TEXT!\n", 0x1B, 32);//doesn't work
Run Code Online (Sandbox Code Playgroud)

虽然:

printf("%c[%dmCOLORED_TEXT\n", 0x1B, 32); //works
Run Code Online (Sandbox Code Playgroud)

这适用于使用wattron/wattroff不方便的情况;例如,当从输出此类转义码的进程的 stdout 重定向输出时。

Wil*_*ine 5

不。要实现这一点,唯一的方法是自己解析字符串,将转义码转回适当的curses 命令,与输出一起发出。

您应该意识到的一件事是,这些代码虽然被广泛实施,但并不通用。curses 的主要目的之一是将其标准命令转换为一系列特定于终端的控制代码。因此,传递可能或可能不对应于当前终端类型的代码并不真正适合curses模型。更根本的是,这些代码将以诅咒无法跟踪的方式改变终端状态,从而使其窗口结构的内容不再与屏幕上的内容匹配。

  • 这不是小事。我这里有一个解析器,如果有帮助的话:https://github.com/wmcbrine/MultiMail/blob/master/interfac/ansiview.cc (3认同)
  • 您能提供一个示例来说明如何将转义代码转回curses 命令吗? (2认同)