Перейти в группу новостей: 
 
Тема СИ, linux, отличить esc от стрелок.
Написал killer1804 <denis@zlatunix.ru>
Дата 10 октября 2019 в 09:29:22
Группа новостей kraft.programming

есть такой код:

#include
#include
#include

int main()
{

struct termios term;
char buf;
tcflag_t old_lflag;

tcgetattr (0, &term);
old_lflag = term.c_lflag;
term.c_lflag &= ~(ECHO | ICANON);
tcsetattr (0, TCSANOW, &term);
read (0, &buf, 1);
printf ("%i\n", buf);
term.c_lflag = old_lflag;
tcsetattr (0, TCSANOW, &term);
return 0;
}

Он отвечает за определение нажатых кнопок, все было прекрасно, пока я не
решил определять нажатие кнопки escape.

При нажатии какой-либо кнопки, в stdin что-то пишется, в его буфер если
быть точнее.
read может это по байтам читать и записывать в buf.
В случае нажатии "стрелка вверх" в stdin записывается последовательность
байт, которая как int выглядит следующим образом:
27,91,65
Но при нажатии esc туда пишется только:
27
И вот вопрос, как отличить нажатие стрелки от esc ?
Ведь, если создать конструкцию вида (примерно)
read...if (a==27) ...read...if (a==91)...read...(if a==65) x="стрелка
вверх".

Наверное точнее было бы спросить - как узнать есть ли что в stdin, чтобы
read это считал, ведь если там ничего не будет для read, а его попросить
считать 1 байт, то он будет ждать этого, пока она там не появиться :)

Пробовал делать конструкции вида b=read (0, &buf,0), ожидая, что read
будет возвращать разные значения для случаев когда в stdin что-то есть и
когда нет, но всегда возвращался 0.

Вообщем жду любых советов, спасибо.
Все сообщения в этой теме
 
#  СИ, linux, отличить esc от стрелок. killer1804 10 октября 2019 в 09:29:22
#  Re: СИ, linux, отличить esc от стрелок. Alexei 10 октября 2019 в 09:38:29
#  Re: СИ, linux, отличить esc от стрелок. Alexey Tomin 10 октября 2019 в 09:59:34



Время выполнения скрипта: 0.00066399574279785 сек.