Я пытаюсь, чтобы ncurses генерировал события KEY_HOME или KEY_END, вместо этого необработанная escape-последовательность проходит как последовательность символов.
Следующая простая программа на C иллюстрирует проблему:
#define _XOPEN_SOURCE 700
#include <curses.h>
#include <stdio.h>
#include <stdlib.h>
#include <err.h>
void clean(void)
{
echo();
nl();
nocbreak();
endwin();
}
int main(int argc, char *argv[])
{
setvbuf(stderr, NULL, _IONBF, 0);
initscr();
cbreak();
nonl();
noecho();
atexit(clean);
keypad(stdscr, TRUE);
clear();
refresh();
int ch = getch();
if (ch == ERR)
errx(EXIT_FAILURE, "getch");
warnx("read: %x", ch);
halfdelay(1);
while((ch = getch()) != ERR)
{
warnx("read: %x", ch);
}
exit(EXIT_SUCCESS);
}
Компилировать с помощью -lncurses и перенаправить stderr в файл журнала.При нажатии HOME:
test: read: 1b
test: read: 5b
test: read: 31
test: read: 7e
При нажатии UP
test: read: 103
Почему HOME и END (и действительно F1 и т. Д.) Не анализируются ncurses в KEY_HOME?