Почему Enter работает только на NumPad`e?
Потому что согласно
man getch, ncurses использует terminfo чтобы понять, какие клавиши что делают. В частности:
Ncurses uses the terminfo definition. If it says that KEY_ENTER
is control/M, getch will return KEY_ENTER when you press control/M.
Ни в одном из файлов terminfo для терминалов которые есть у меня (screen.xterm-256color, xterm-256color) этого не сделано.
man terminfo описывает как устроены файлы terminfo, команда infocmp может быть использована для декомпиляции terminfo текущего терминала, а команда tic -- для компиляции обратно. Если сделать так:
$ infocmp > ~/tmp/terminfo
$ sed -i 's/kent=[^,]*/kent=\\r/' ~/tmp/terminfo
$ tic ~/tmp/terminfo
то твоя программа начинает работать правильно.
Но неправильно начинает работать, например, линуксовый
make menuconfig
-- нажатия на enter игнорируются. В коде menuconfig
проверка на нажатие enter выглядит как
case '\n'
.
Почему так получилось и как правильно обрабатывать enter -- это два других интересных вопроса.