LINUX.ORG.RU

ncurses. Обработка Esc

 ,


0

3

Мне нужно отследить нажатие на клавишу Esc.
Ничего странного не так ли?
код:

switch(ch)
{
    ...
    case 27:	// Esc 
    {
		nodelay(stdscr,true);
		int second = getch();
		if (second == -1)
		{
		    // ESC
		    ...
		}
		else
		{
		    // ALT + Something
                    ...
		}
		nodelay(stdscr,false);
    }
}


Однако после нажатия на клавишу и собственно действием проходит где-то секунда. Может я не так nodelay готовлю? Может это вообще не то, что я думаю?
В общем вопрос задаю в общем виде:
Как в ncurses правильно (кросплатформенно!) обрабатывать нажатие на клавишу Esc?

★★☆

man nodelay

The nodelay option causes getch to be a non-blocking call. If no input is ready, getch returns ERR. If disabled (bf is FALSE), getch waits until a key is pressed.

Тут под «key» понимается либо Escape, либо Alt+Key, ncurses часть символа не отдаст так легко.

Можно сделать keypad(status_bar, false);, но тогда расширенные коды надо будет самому разбирать (либо забить на них). Либо так:

#if defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS >= 20081102
#ifdef HAVE_SET_ESCDELAY_FUNC
	/* Use ncurses specific function to disable delay after pressing escape key */
	set_escdelay(0);
#endif
#endif

На BSD и производных вроде работает, в cygwin работает, на офтопике в pdcurses задержки нету. Более кросс-платформенного ничего не находил.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Спасибо. Работает, хотя меня и не оставляет чувство какого-то костылизма.
Чувствую этот ncurses мне ещё боком вылезет.

Stahl ★★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.