我目前正在编写一个ncurses shell,为了读取输入,逐字读取它非常重要,因此我使用mvwgetch
命令。并在计数器逐字读取时递增计数器。问题是,每当我按下箭头键或退格键时,它们的输出就会被打印出来。例如,如果我按backspace键,^?
将被打印。
while ((command[i] = mvwgetch(promptwin, promptline, posx)) != '\n') {
if (command[i] == 7) { // if entered character is a backspace
i =-2;
posx =- 2;
mvwdelch(promptwin, promptline, posx);
mvwdelch(promptwin, promptline, posx - 1);
command[i] = '\0';
} else {
posx++;
posyx[1] = posx;
wmove(promptwin, promptline, posx);
}
i++;
}
为了跟踪光标在屏幕上的位置,需要读取字符。在我的代码中,我试图解决这个问题,但它仍然显示这些字符。PS:在linux上工作。
最佳答案
首先,7不是backspace——7是bell。你想要8个。您也可以检查键的退格。
您提到不使用noecho()
,但这正是禁止特殊字符输出所必须做的。然后可以显式地addch()
要显示的字符(可打印字符)。