Получать события нажатия клавиш и отпускания клавиш в терминальных приложениях Linux? - PullRequest
20 голосов
/ 11 сентября 2009

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

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

Ответы [ 3 ]

9 голосов
/ 21 октября 2009

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

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

Необработанный режим имеет тот недостаток, что вам приходится самостоятельно преобразовывать коды сканирования в символы.

5 голосов
/ 11 сентября 2009

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

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

3 голосов
/ 11 сентября 2009

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

...