Получение событий нажатия и отпускания клавиш в терминальных приложениях Linux?

Я хотел бы написать простую программу на C, которая будет выполнять различные действия в зависимости от событий «нажатие клавиши» и «нажатие клавиши». Эта программа будет запускаться изнутри rxvt.

Какую библиотеку или механизм я должен использовать для доступа как к нажатию клавиш, так и к выпуску? Верно ли, что чтение /dev/tty даст только ключевые релизы? Верно ли это также для termcap, terminfo, ncurses и сленга? Есть ли способ добиться этого из терминального приложения?


person Community    schedule 11.09.2009    source источник


Ответы (3)


Следующие ссылки могут оказаться полезными при использовании необработанного режима клавиатуры, который предоставит вам доступ к событиям клавиатуры, а не только к выпуску клавиш.

  1. Эта статья из журнала Linux Journal
  2. Эта статья на SourceForge
  3. И этот HOWTO, когда все идет плохо

У режима Raw есть тот недостаток, что вам нужно выполнять собственное преобразование из скан-кодов в символы.

person Andrew Edgecombe    schedule 21.10.2009
comment
+1 Спасибо за этот ответ, мне нужен необработанный доступ с клавиатуры в терминальной программе, и это было решением! Но следует помнить, что при использовании прямого доступа с клавиатуры ваша программа не ведет себя как классическая терминальная программа. Например, при запуске на удаленном компьютере вы не можете зарегистрировать ключевые события. Просто имейте это в виду. - person leemes; 21.03.2011
comment
Обратите внимание, что они работают, только если вы подключены к реальной консоли - если вы используете псевдотерминал (например, окно терминала), они не будут работать. - person Chris Dodd; 04.04.2019

В общем случае это не сработает. Терминалы ANSI (от которых происходят все эмуляторы) представляют только события нажатия клавиши. Они не записывают события вниз / вверх независимо.

Если вам нужен низкоуровневый доступ к событиям клавиатуры, правильная среда - это действительно программа с графическим интерфейсом. Даже веб-приложение будет иметь более чистый доступ к ключевым событиям, чем терминал.

person Andy Ross    schedule 11.09.2009

Не думаю, что ncurses сработает. Ссылка, которую предоставил Базилев, говорит о клавишах «стрелка вверх» и «стрелка вниз», а не о нажатии и отпускании клавиши.

person user172103    schedule 11.09.2009