2010-12-07 3 views
4

Я знаю, что могу сделать attron и attroff с цветом я выбираю, однако, я хотел бы знать, если это возможно сделать с цветовыми кодами эвакуационных ANSI в Ncurses:ANSI цвета С и Ncurses

#include <stdio.h> 
#include <ncurses.h> 

int main() 
{ 
    initscr(); 
    char *s2 = NULL; 
    const char *s1 = "World"; 
    int n = 10; 

    // What would be a good way to colour %d? 
    // seems it is not safe to us the ANSI color escape in here... 
    s2 = malloc (snprintf (NULL, 0, "Hello %s \033[22;31m%d", s1, n) + 2); 
    sprintf (s2, "Hello %s \033[22;31m%d", s1, n); 
    printw("%s", s2); 
    refresh(); 
    getch(); 
    endwin(); 

    return 0; 
} 

Связывание с -lncurses

регулярно printf("\033[22;31mHello, World!\n"); в не-Ncurses работает программа.

ответ

0

Думаю, вы, вероятно, заблудились на опасной территории. Curses почти наверняка будет отслеживать позиции символов на основе выходных символов, и, поскольку он обеспечивает собственную обработку цвета, он, вероятно, также не обнаружит escape-последовательности ANSI.

Это может Работа (вы попробовали?), Но это может также наполнить управление окнами вообще.


И, так как вы заявили в комментариях, что он не работает, то я думаю, ответ будет «нет» :-)

Если вы после этого возможного способа позволить ANSI escape-последовательностей в ваших строках, тогда один из способов (kludge, хотя это) - перехватить строку и изменить ее. Есть вспомогательные функции, как myPrintW(), которая принимает строку и разбивает ее, что-то вроде (псевдо-код):

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 

Это в основном ломается строка в нормальные последовательности символов и изменение цвета-последовательности и вы» d обрабатывать каждый отдельно. Для преобразования последовательностей в требуемые вызовы attron/off потребуется таблица поиска. Не красиво, но иногда прагматизм лучше всего.

+0

Да я пробовал, но это не сработало.Мне интересно, что было бы хорошим способом сделать выше (я обновил свой пример кода) – DaNiro1 2010-12-07 05:43:49

0

Да. Все зависит от того, какое программное обеспечение или прошивка прослушивает вывод программы. Для V3.3 MSDOS нет, это не сработает, если не загружен драйвер устройства ansi.sys.

Современные оконные окна имеют тенденцию иметь ANSI x3.64 семантика, поэтому эти escape-последовательности будут часто работать. Но не ожидайте слишком много: слишком широкие и лишние высокие персонажи, как известно, плохо поддерживаются.

0

Это не будет слишком безопасно интегрировать ANSI на ncurses. Вы хотите использовать вызовы attron/off и, возможно, разделить строку на %s и %d. Для> 2 преобразования, вам нужно реализовать свой собственный printw

0

2008 список рассылки Тема обсуждения этого: https://lists.gnu.org/archive/html/bug-ncurses/2008-11/msg00026.html

возможности поднятый были:

Смежные вопросы