Я написал функцию getch для программы. Я не мог использовать проклятия, поскольку он разбивает терминал на iostream
. Я уже использую. Код:Чтение ESC на Linux во время небуферизованного ввода в C
inline std::string getch() {
char inp[4];
system("stty raw");
inp[0] = std::cin.get();
if(inp[0] == 27 && (inp[1] = std::cin.get()) != std::char_traits<char>::eof()) {
std::cin>>inp[2];
inp[3] = '\0';
}
else {
inp[1] = '\0';
}
system("stty cooked echo");
return std::string(inp);
}
Я знаю, что было бы лучше использовать termios.h
вместо системных вызовов. Все работает отлично, за исключением случаев, когда ESC
key
. Я пытаюсь захватить стрелки, которые являются строками, например, "\1B[A"
. Когда я обнаруживаю ESC
в качестве первого символа, я также читаю два вторых, чтобы получить полный код ключа. Проблема в том, что она не должна возникать, когда я нажимаю ESC
, так как это код 1B. cin.get()
должен return EOF
, когда буфер пуст во время чтения, но он просто останавливается.
Есть ли способ читать ESC
ключ на linux
без использования проклятий? Почему мое решение не работает?
Thanks
Нет, используйте 'ncurses' или, возможно,' readline' библиотеки. Другие решения не являются практичными, если вы не знаете очень хорошо 'tty'-s .... –