I know I can do the attron
and attroff
with the color I choose to, however, I would like to know if it\'s possible to do it with the ANSI colour es
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.
2008 mailing list thread discussing this: https://lists.gnu.org/archive/html/bug-ncurses/2008-11/msg00026.html
The possibilities raised were to:
create a parser for ANSI escape codes (WONTFIX in source). Mutt and Screen implement this: https://lists.gnu.org/archive/html/bug-ncurses/2008-11/msg00028.html
create a terminfo entry: https://lists.gnu.org/archive/html/bug-ncurses/2008-11/msg00029.html
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