Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ncurses to external shell and back messing with keys

Tags:

ruby

ncurses

I have this ncurses application that is doing the standard recipe for temporarily dropping out of ncurses, running an external editor/shell/whatever, and then dropping back to ncurses when it's done.

This ~almost works, except that the first few keypresses that ncurses gets afterwards are obviously bogus; ncurses thinks ^[ and A are seen respectively if I press the up arrow twice.

Anyone seen this behavior before and know what the magic incant to fix this is? If it helps any, this is the Ruby ncurses library.

like image 716
Edward Z. Yang Avatar asked Nov 14 '22 15:11

Edward Z. Yang


1 Answers

After rootling around a bit, I found a cargo culting solution: explicitly call keypad(1) after getting out the shell on stdscr. I have no idea why this works, but it does. I'll mark someone else's answer as yes if they can explain why. The current working theory is that keypad touches some sort of internal buffer and clears it.

Scratch that:

NCURSES_EXPORT(int)
keypad(WINDOW *win, bool flag)
{
    T((T_CALLED("keypad(%p,%d)"), win, flag));

    if (win) {
        win->_use_keypad = flag;
        returnCode(_nc_keypad(SP, flag));
    } else
        returnCode(ERR);
}
like image 195
Edward Z. Yang Avatar answered Dec 11 '22 08:12

Edward Z. Yang