How to stop backspace from appearing in nCurses using C?
我目前正在编写一个 ncurses shell,为了读取输入,逐个字符地读取它很重要,因此我使用的是 mvwgetch 命令。并在逐字符读取时递增计数器。问题是,每当我按下箭头键或退格键时,它们的输出就会被打印出来。因此,例如,如果我按退格键,则正在打印 ^?。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
while ((command[i] = mvwgetch(promptwin, promptline, posx)) != ‘\
‘) { 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上工作。
- 你是如何初始化你的 nCurses shell的?你在你的程序中使用 noecho 吗?你能分享更多的代码吗?这对我们来说有点帮助。如果您使用预定义的 maros 而不是键码的硬编码值,那就太好了:
- 我应该上传什么部分?我没有使用 noecho 因为否则,它不会在 shell 上打印。
- 实际上,我对自己调试您的代码很感兴趣。您可以共享发布此片段的文件。如果您不想在帖子中发送垃圾邮件,可以通过 pastebin 共享代码。
-
唔。添加 mvwscanw(promptwin, promptline, posx,”%[^\
]”, command); 可以解决退格问题,但无法正确处理箭头键。 - 问题是我想知道光标的位置,因为程序每秒更新一个单独的窗口,因此 x 坐标通过共享内存段传递,然后它被移回它离开的位置。
已解决
原来问题是退格的代码是 127。因此它没有被识别。为了处理退格,它现在执行以下代码。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
if(c == 127 || c == 8){ //if character inserted is backspace or delete
if(posx != tcount) { mvwprintw(promptwin, promptline, (posx + 1),“”); mvwprintw(promptwin, promptline, posx,“”); mvwprintw(promptwin, promptline, (posx – 1),“”); wmove(promptwin, promptline, (posx – 2)); command[(chara – 1)] = ‘\\0′; chara–; posx–; posyx[1] = posx; } else { mvwprintw(promptwin, promptline, (posx + 1),“”); mvwprintw(promptwin, promptline, posx,“”); } } else { command[chara] = c; posx++; posyx[1] = posx; wmove(promptwin, promptline, posx); chara++; } |
首先,7 不是退格键——7 是铃声。您想要 8。您还可以检查 KEY_BACKSPACE。
你提到不使用 noecho(),但这正是你必须做的来抑制特殊字符的输出。然后你可以明确地 addch() 你想要出现的那些(可打印的字符)。
- 使用 noecho() 的问题是,我必须打印用户插入的每个字符。
- 我不明白为什么这是个问题。
来源:https://www.codenong.com/43659660/