ANSI colors in C and ncurses

别等时光非礼了梦想. 提交于 2019-11-29 10:54:39

I think you're probably straying into dangerous territory there. Curses will almost certainly track character positions based on output characters and, since it provides its own colour handling, it probably won't detect ANSI escape sequences as well.

It may work (did you try it?) but it may also stuff up the window management altogether.


And, since you stated in a comment that it didn't work then I guess the answer would be "no" :-)

If you're after a possible way to allow the ANSI escape sequences in your strings, then one way (kludge though it is) would be to intercept the string and modify it. Have a helper function like myPrintW() which takes a string and breaks it down, something like (pseudo-code):

def myPrintW(s):
    while s not end of string:
        s2 = position of color-change-sequence in s
        if s2 == NULL exit while
        printw characters from s (inclusive) to s2 (exclusive)
        decode color-change-sequence at s2 and issue relevant attron/off
        s = s2 + length of color-change-sequence
    endwhile
enddef

This would basically break down the string into normal character sequences and color-change-sequences and you'd process each separately. It would require a lookup table in order to translate the sequences into the desired attron/off calls. Not pretty, but sometimes pragmatism is best.

Yes. It all depends on what kind of software or firmware is listening to the program's output. For V3.3 MSDOS, no, it won't work unless the device driver ansi.sys is loaded.

Modern terminal windows tend to have ANSI x3.64 semantics, so those escape sequences will often work. But don't expect too much: extra wide and extra high characters are notoriously poorly supported.

It won't be too safe integrating ANSI on ncurses. You want to use attron/off calls and perhaps split the string into %s and %d. For > 2 conversions, you need to implement your own printw

2008 mailing list thread discussing this: https://lists.gnu.org/archive/html/bug-ncurses/2008-11/msg00026.html

The possibilities raised were to:

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!