Как использовать escape-коды ANSI внутри mvwprintw в ncurses?

Есть ли способ использовать escape-коды ANSI внутри mvwprintw?

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

хотя:

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

Это было бы для случаев, когда использование wattron/wattroff неудобно; например, при перенаправлении вывода из stdout процесса, который выводит такие escape-коды.


person timotheecour    schedule 13.12.2014    source источник


Ответы (1)


Нет. Единственный способ заставить это работать - это самостоятельно проанализировать строку, превратив escape-коды обратно в соответствующие команды curses, чтобы выдать их вместе с вашим выводом.

Одна вещь, которую вы должны понимать, это то, что эти коды, хотя и широко применяются, не являются универсальными. Одной из основных целей curses является преобразование его стандартных команд в набор управляющих кодов, специфичных для терминала. Таким образом, передача кодов, которые могут соответствовать или не соответствовать текущему типу терминала, на самом деле не соответствует модели curses. Что еще более важно, коды изменят состояние терминала таким образом, что проклятия не смогут его отследить, так что содержимое его оконных структур больше не будет соответствовать тому, что было на экране.

person William McBrine    schedule 14.12.2014
comment
Можете ли вы привести пример того, как escape-код можно превратить обратно в команды curses? - person Azimjon Ilkhomov; 31.12.2017
comment
Это не тривиально. У меня есть синтаксический анализатор, если он поможет: github.com/wmcbrine/ MultiMail/blob/master/interfac/ansiview.cc - person William McBrine; 31.12.2017