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

7
有没有一种方法可以在mvwprintw函数内使用ANSI转义码?
mvwprintw(window, 0, 0,"%c[%dmCOLORED_TEXT!\n", 0x1B, 32);//doesn't work

即使:

printf("%c[%dmCOLORED_TEXT\n", 0x1B, 32); //works

这适用于在使用wattron/wattroff不方便的情况下,例如重定向输出来自stdout 的进程,该进程输出此类转义码。

1
https://dev59.com/kVLTa4cB1Zd3GeqPanVB - Ciro Santilli OurBigBook.com
1个回答

5
不行。唯一的方法是自己解析字符串,将转义代码转换回相应的curses命令,并与输出一起发出。您应该意识到的一件事是,尽管这些代码被广泛实现,但它们并非普遍适用。 curses的主要目的之一是将其标准命令转换为特定于终端的控制代码序列。 因此,通过可能与当前终端类型不对应的代码并不真正符合curses模型。更基本的是,这些代码将以一种curses无法跟踪的方式改变终端状态,使其窗口结构的内容不再与屏幕上的内容匹配。

2
你能提供一个示例,说明如何将转义代码转换回 curses 命令吗? - Azimjon Ilkhomov
3
这并不是一件简单的事情。如果有帮助的话,我这里有一个解析器:https://github.com/wmcbrine/MultiMail/blob/master/interfac/ansiview.cc - William McBrine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接