gpt4 book ai didi

c - C 和 ncurses 中的 ANSI 颜色

转载 作者:太空狗 更新时间:2023-10-29 15:08:35 24 4
gpt4 key购买 nike

我知道我可以用我选择的颜色来做 attronattroff,但是,我想知道是否可以用 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 程序中有效。

最佳答案

我认为您可能误入了那里的危险区域。 Curses 几乎肯定会根据输出字符跟踪字符位置,并且由于它提供了自己的颜色处理,它可能也不会检测 ANSI 转义序列。

如果您正在寻求一种允许字符串中使用 ANSI 转义序列的可能方法,那么一种方法(虽然很笨拙)是拦截字符串并对其进行修改。有一个像 myPrintW() 这样的辅助函数,它接受一个字符串并将其分解,类似于(伪代码):

def myPrintW(s as copy):
while s not empty:
p = position of first ansi-sequence in s
if p == NULL exit while
printw first p characters of s
remove the first p characters from s

decode ansi-sequence at start of s
issue relevant attron/off for that ansi-sequence
remove ansi-sequence from start of s

endwhile
output s though it may be empty
enddef

这基本上会将字符串分解为正常字符序列和 ansi 序列,您将分别处理它们。

为了将序列转换为所需的 attron/off 调用,它需要一个查找表(如果您需要处理带有任意参数的 ANSI 序列,则需要智能)。

关于c - C 和 ncurses 中的 ANSI 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4373690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com