Не канонический режим

Какой простой способ использования 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, я получаю

^?

.
Но мне нужно стереть последний символ ..

Спасибо.

2

Решение

Я не думаю, что это возможно. Согласно tcsetattr() Страница man (выделено мной):

В неканоническом режиме ввод доступен сразу (без участия пользователя
необходимость ввода символа разделителя строк), и редактирование строки отключено.

Кроме того, если ваша программа сразу получает каждый введенный вами символ, как ее можно снова «убрать»?

1

Другие решения

Сделайте это в вашем Linux-терминале, и, как обычно, кодирование не будет отображаться ^? когда вы используете Backspace.

Вы также можете добавить это в свой .profile как постоянный.

 stty erase ^?
0

По вопросам рекламы [email protected]