Я копирую интерфейс Irssi для студенческого проекта. Я хотел бы использовать NCurses для текстового интерфейса и readline, чтобы улучшить возможности редактирования текста при написании сообщений.
Этот вопрос, ответ и project предоставил мне отличную отправную точку.
Моя проблема в том, что я хотел бы иметь такой цикл ввода / события:
int ch;
while (exit_condition) {
ch = wgetch(window);
switch (ch) {
case ERR: continue;
case KEY_F(1): /* do something */ break;
case KEY_UP: /* do something else */ break;
default: forward_to_readline(ch); break;
}
}
Но для соответствия KEY_F(n)
или KEY_UP
мне нужно включить keypad(window, TRUE)
, что изменит ввод и сделает его непригодным для чтения.
Из руководства:
Если клавиатура имеет значение ИСТИНА и нажата функциональная клавиша, вместо необработанных символов возвращается маркер для этой функциональной клавиши.
Когда получен символ, который может быть началом функциональной клавиши (что на современных терминалах означает escape-символ), curses устанавливает таймер. Если остаток последовательности не наступает в течение заданного времени, символ пропускается; в противном случае возвращается значение функциональной клавиши. По этой причине многие терминалы испытывают задержку между нажатием клавиши выхода и возвратом в программу выхода.
Вот мои мысли:
- Есть ли функция для отмены эффекта
keypad
? - Стоит ли мне реализовать поведение
keypad
? Полагаю, я тоже должен это сделать, если хочу ловить такие события, как Shift + Up. Буду рад иметь примеры этого. - Может ли readline дать мне комбинацию клавиш, если я не могу получить ее из NCurses? возможно, с вызовами привязки клавиш (актуально?)?
Спасибо за уделенное время !