У меня есть приложение на основе проклятий ( WordGrinder ). Я только что получил сообщение об ошибке от пользователя, в котором говорится, что некоторые клавиши не работают должным образом на его клавиатуре. В расследовании он прав.
Обсуждаемыми клавишами являются клавиши курсора SHIFT + и некоторые из клавиш навигации клавиатуры, например, END. Изучая происходящее, кажется, что проклятия не посылают мне события для этих ключей. В случае клавиш курсора SHIFT + я ничего не получаю, а для КОНЦА я получаю необработанную escape-последовательность.
Это удивляет меня. Все остальные ключи интерпретируются и корректно переводятся в ключевые символы. Я бы ожидал, что получит KEY_SLEFT
и KEY_END
. Почему не я?
Я смотрел на некоторые другие приложения, где работают эти клавиши, но не вижу ничего очевидного, что я делаю неправильно; а такие приложения, как nano, действительно делают злые вещи, например, обрабатывают собственный синтаксический анализ escape-ключа, поэтому я не знаю, являются ли они хорошим кандидатом на исходный код.
Я инициализирую ncurses следующим образом:
initscr();
raw();
noecho();
meta(NULL, TRUE);
nonl();
idlok(stdscr, TRUE);
idcok(stdscr, TRUE);
scrollok(stdscr, FALSE);
intrflush(stdscr, FALSE);
keypad(stdscr, TRUE);
Я использую gnome-терминал в качестве эмулятора терминала, а xterm в качестве типа терминала. Локаль UTF-8, и у меня есть вариант библиотеки ncursesw.
Есть идеи?
Обновление:
Ну, много месяцев спустя я попробую Wordgrinder с gnome-терминалом Gnome 3 и обнаружу, что все эти дурацкие ключи генерируют действительные коды ключей ncurses. Например, SHIFT + LEFT теперь генерирует код клавиши 393. xterm дает точно такой же результат. К сожалению, CTRL + LEFT генерирует код клавиши 539, и в документации Curses четко указано, что допустимые коды клавиш находятся в диапазоне от KEY_MIN до KEY_MAX --- от 257 до 511 ...
Так что, по крайней мере, сейчас все работает, но как работают эти странные новые коды клавиш? Они определены где-нибудь? Они, конечно, не в заголовках.