c - 删除已在 ncurses 终端中打印的字符

标签 c linux ncurses curses

我正在用 ncurses 编写一个文本编辑器。该程序以原始模式初始化。所以我需要手动做很多事情,比如删除,避免打印不可打印的字符等。

删除:

void console(ch)
{
    if(ch == 8) //8 = backspace according to asciitables.com
    {
        printw("\b");
        printw(" ");
    }
    else
    {
        addch(ch);
    }
}

为了避免不可打印的字符:

    void console(ch)
    {
       bool safe = TRUE;
       int avoid[] = { 1,2,3,4,5,6,7,8};
       for(int i=0;i<4;i++)
    {
        while(ch==avoid[i])
        {
            safe = false;
        }
    }
    if(safe)
    {
        printw("%c",ch); //Prints the key's characters on the screen.
    }
    else 
    {
        break;
    }
 }

在删除的时候,我想删除终端中之前打印的字符,并插入一个空格,将光标移回上一个字符的位置。但这不起作用。

在avoid non-printable character中,我想避免打印不可打印的字符,只打印可打印的字符。但这似乎也行不通。

如果有人指出我错误的地方并纠正我,那将非常有帮助。如果有人能告诉我 ncurses 库中是否有任何特定功能,这也会很有帮助。我对 ncurses 还很陌生。

最佳答案

在 curses 中检测“不可打印”字符的最简单方法是检查 unctrl 的结果.如果字符是可打印的,则结果是单个字符。否则就是两个或多个字符:

char *check = unctrl(ch);
int safe = (check != 0 && strlen(check) == 1);

(manual page 有一些细节)。

顺便说一句,addchprintw 更适合打印字符(但请记住,它的参数是 chtype,适合 int,而不是 char)。同样,手册页对于准备您的程序很有用。

关于c - 删除已在 ncurses 终端中打印的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47604135/

相关文章:

c - 显示文本文件

c - FFmpeg av_hwdevice_ctx_create 返回 ENOMEM

c - fread 和 ferror 不要设置 errno

php - MySQL 服务器在 PHP 脚本中保留 "going away"

c - ncurses 窗口大小调整模式

c++ - 正确处理有符号和无符号值的比较

c - 如何在 C 中将函数的 I/P 参数打印为变量

linux - Linux 中的 sh 脚本漏洞

linux - grep unicode 16 支持