VT Terminal - Отключить локальное редактирование и эхо - PullRequest
1 голос
/ 11 февраля 2011

Я пишу консольное приложение, которое должно работать в VT-совместимых сборщиках данных. Попробовав несколько эмуляторов, я обнаружил, что у них другое стандартное поведение.

Меня беспокоит то, что большинство эмуляторов имеют локальный буфер данных и отправляют его на сервер, когда я нажимаю return. Это позволяет мне редактировать вводимый текст.

Эта функция мне не подходит, потому что пользователь может испортить расположение экрана.

Что такое коды перехода, чтобы отключить локальное отображение символов (разрешить серверу отправлять их обратно) и настроить терминал на немедленную отправку данных на сервер без ожидания нажатия клавиши ВОЗВРАТ?

Спасибо

1 Ответ

4 голосов
/ 17 октября 2011

Функция локальной буферизации данных называется канонизацией.Чтобы отключить его (как и эхо), выполните:

#include <string.h> /* for memcpy() */
#include <termios.h>

struct termios term_stored;
struct termios term_new;
tcgetattr(0,&term_old);
memcpy(&term_new,&term_stored,sizeof(struct termios));
term_new.c_lflag &= ~(ECHO|ICANON); /* disable echo and canonization */
tcsetattr(0,TCSANOW,&term_new);

/* your code */

tcsetattr(0,TCSANOW,&term_stored); /* restore the original state */

Или рассмотрите возможность использования libedit , ncurses или readline.

...