ncurses非阻塞读取将光标推到窗口底部

时间:2015-11-28 18:06:12

标签: c++ ncurses curses

我的游戏主循环依赖于来自getnstr的非阻塞读取。在继续循环的其余部分之前,它会检查它所读取的字符串是否具有非零长度(如果存在这种行为,我无法找到获取此行为的约定)。

问题在于它具有将输入光标强制到窗口底部的效果,就好像我有垃圾输入或其他东西。

/usr/local/bin/docker-machine -D create -d virtualbox --virtualbox-memory 2048 default

1 个答案:

答案 0 :(得分:1)

同意这看起来很令人惊讶,但是SVr4诅咒(ncurses在这个细节中确实匹配)总是在完成(尝试)读取字符后移动到下一行。

您可以在第191-207行的Illumos' Github中看到(Open)Solaris的相应代码:

/*
 * The following code is equivalent to waddch(win, '\n')
 * except that it does not do a wclrtoeol.
 */
if (doecho) {
    SP->fl_echoit = TRUE;
    win->_curx = 0;
    if (win->_cury + 1 > win->_bmarg)
        (void) wscrl(win, 1);
    else
        win->_cury++;

    win->_sync = savsync;
    win->_immed = savimmed;
    win->_leave = savleave;
    (void) wrefresh(win);
}

即" win->_cury++; " (或滚动操作)。