NCurses с модификаторами Arrow Keys Plus - PullRequest
1 голос
/ 30 января 2012

У меня возникают проблемы с обнаружением нажатий клавиш со стрелками и без нажатых модификаторов SHIFT и CTRL.

У меня есть следующий тестовый код:

WINDOW * mainwin = initscr();
keypad(mainwin, TRUE);
int c = wgetch(mainwin);

Это успешно возвращает различные значения для'c', когда нажаты клавиши со стрелками - с модификаторами - и для параметра TERM терминала установлено значение 'xterm' .Он не работает, если для параметра TERM терминала установлено значение 'linux' .Все, что я получаю для 'c' - это 27 с нажатой клавишей shift или ctrl.

Я бы хотел, чтобы он работал с использованием типа терминала linux.Какие-либо предложения?

1 Ответ

3 голосов
/ 05 апреля 2012

Консоль Linux вообще не может представлять измененные клавиши курсора.Вы не можете обнаружить состояние Shift , Ctrl или Alt на этой консоли, поскольку оно не передается.

На подлинном xterm или достаточносовместимый клон (и большинство из них в наши дни), вы можете его обнаружить, но эта способность достаточно новая, чтобы ncurses ее не понимал и запутался в сгенерированной расширенной escape-последовательности.

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

Вы можете попробовать использовать это вместо curses '* getch().

...