Какой простой способ использования backspace в неканоническом режиме в терминале Linux?
Это часть кода, когда я устанавливаю флаги:
struct termios old_tio, new_tio;
/* get the terminal settings for stdin */
tcgetattr(STDIN_FILENO, &old_tio);
/* we want to keep the old setting to restore them a the end */
new_tio = old_tio;
/* disable canonical mode (buffered i/o) and local echo */
new_tio.c_lflag &=(~ICANON );/*& ~ECHOE );*/
/* set the new settings immediately */
tcsetattr(STDIN_FILENO,TCSANOW,&new_tio);
for(;1;) {
c = getchar();
switch(c) {...}
}
И когда я нажимаю клавишу Backspace, я получаю
^?
.
Но мне нужно стереть последний символ ..
Спасибо.
Я не думаю, что это возможно. Согласно tcsetattr()
Страница man (выделено мной):
В неканоническом режиме ввод доступен сразу (без участия пользователя
необходимость ввода символа разделителя строк), и редактирование строки отключено.
Кроме того, если ваша программа сразу получает каждый введенный вами символ, как ее можно снова «убрать»?
Сделайте это в вашем Linux-терминале, и, как обычно, кодирование не будет отображаться ^? когда вы используете Backspace.
Вы также можете добавить это в свой .profile как постоянный.
stty erase ^?