Backspace不擦除字符,类似于BASH

时间:2013-03-12 16:35:09

标签: c

我可以解析输入,在历史中上下遍历,但我的退格不起作用。那是为什么?

void printPrompt(void)
{ // prints working directory prompt
    char cwd[256];
    getcwd(cwd, 255);
    printf("%s> ", cwd);
    fflush(stdout);
}

2 个答案:

答案 0 :(得分:5)

当您要发送DEL(12月8日)时,您正在尝试打印BS(12月127日)。您也可能想要发送一个空格和另一个BS以清除该字符(BS只移动光标)。因此,当您获得buf[0] == 8时,请打印8328

else if (buf[0] == 8)
{ // Backspace
    if (charsRead > 0)
    {
        line[charsRead - 1] = '\0';
        charsRead--;
        printf("%c%c%c", 8, 32, 8); // CHANGE HERE
    }
}

答案 1 :(得分:0)

退格正在运行。问题是在退格后重新显示该行。您应该打印一个回车符(\ r \ n),然后重新打印包括提示符的行。

编辑:我不确定我的建议是否也可以通过终端100%移植。您可能需要使用curses之类的东西来处理可移植性问题。