使用 termcaps 删除输出

问题描述

我试图删除从光标到行尾的字符,问题是当我打印一个新行('\n')之后,被删除的字符重新出现,我也试图打印一个空字符在新行之前,它也做同样的事情。 最少的代码

#include <ncurses.h>
#include <term.h>
#include <unistd.h>
#include <stdlib.h>

int ft_putchar(int ch)
{
    char c = (char)ch;
    return (write(1,&c,1));
}

int main(void)
{
    tgetent(getenv("TERM"),NULL);
    char * LE = tgetstr("LE",NULL); // termcap for cursor left
    char * kL = tgetstr("kL",NULL); // termcap for cursor right

    write(1,"Hello World",11);
    tputs(tparm(LE,5),1,ft_putchar); // move the cursor 5 cases left
    tputs(kL,ft_putchar); // delete to end of line
    write(1,"\n",1);
    return (0);
}

输出Hello World

没有最后一个 write(1,1)

输出Hello

我花了几个小时才发现是新生产线导致了这种情况,现在我不知道该怎么做。

而且我也试过 write(1,"\0\n",2) 并且效果相同。

关于如何避免这种情况的任何线索?

解决方法

查看 ce termcap 条目,这意味着从光标到行尾清除。