Какие числовые значения имеют F-клавиши (F [1-12]) и клавиши со стрелками? - PullRequest
1 голос
/ 17 января 2009

Я хотел бы написать приложение на C, которое использует клавиши со стрелками для навигации и F-клавиши для других функций, таких как сохранение в файл, выбор языка и т. Д.

Вероятно, значения зависят от платформы, так как я могу узнать, какие значения имеют ключи?

Если они этого не делают или если вы их знаете, мне не нужно знать, как это выяснить;)

Edit: Мои платформы Linux и M $ Windows. Поэтому я ищу как можно более портативное решение.

(Вероятно, что-то вроде

#ifdef __unix__
   #define F1 'some number'
   /* ... */
   #define ARROW_UP 'some other number'
#elif __WIN32__ || MSDOS /*whatever*/
   #define F1 'something'
   /* ... */
   #define ARROW_UP 'something different'
#endif

)

Ответы [ 5 ]

1 голос
/ 17 января 2009

Эта проблема намного сложнее, чем хотелось бы. Вкратце, каждый из этих ключей отправляет последовательность символов, а детали зависят от того, какой эмулятор терминала используется. В Unix у вас есть несколько вариантов:

  • Напишите ваше приложение, чтобы использовать библиотеку curses и использовать ее интерфейс с базой данных terminfo.

  • Самостоятельно проанализируйте базу данных terminfo, чтобы найти последовательности. Или, чтобы использовать API, посмотрите на источники для tput, чтобы увидеть, как это делается.

  • Используйте программу командной строки tput, чтобы помочь обнаружить последовательности. Например, чтобы узнать последовательность для F10, запустите tput kf10 | od -a. Имейте в виду, что это меняется от терминала к терминалу, поэтому вы должны запускать tput при каждом запуске приложения.

  • Напишите ваше приложение, используя одну из библиотек X, и получите доступ к «символам ключа», а не к последовательности символов. функция XLookupKeysym - хорошее место для начала; вы найдете названия символов в /usr/include/X11/keysymdef.h. Если вы собираетесь подключаться по сети из не-X систем (например, Windows), эта опция не так хороша.

Понятия не имею, как это сделать в Windows.

1 голос
/ 17 января 2009

Я думаю, что это зависит от $ TERM, но в любом случае это будет последовательность символов. Я получаю это:

% read x; echo $x | od -c --
^[[15~
0000000  033   [   1   5   ~  \n                                        
0000006

Это мой ключ F5, и я прошу прощения за этот * * nix-ориентированный ответ, если это не ваша платформа.

0 голосов
/ 17 января 2009

Некоторые ключи генерируют 2 символа коды клавиш . Одна техника, которую я успешно использовал на ПК, состоит в том, чтобы получить 2 символа и установить 7-й бит для второго символа и вернуть этот символ в качестве ответа. Это позволяет остальной части программы обрабатывать каждое нажатие клавиши как один символ.

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

0 голосов
/ 17 января 2009

Этот удобный сайт содержит множество полезных фрагментов информации о необработанных кодах сканирования:

http://www.win.tue.nl/~aeb/linux/kbd/scancodes.html#toc1

0 голосов
/ 17 января 2009

Если вы работаете на Unix или Linux, просто введите cntl-V, а затем ключ, находясь в vim *. Вы увидите код.

НТН

ура

Rob

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...