我的游戏主循环依赖于来自getnstr的非阻塞读取。在继续循环的其余部分之前,它会检查它所读取的字符串是否具有非零长度(如果存在这种行为,我无法找到获取此行为的约定)。
问题在于它具有将输入光标强制到窗口底部的效果,就好像我有垃圾输入或其他东西。
/usr/local/bin/docker-machine -D create -d virtualbox --virtualbox-memory 2048 default
答案 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++;
" (或滚动操作)。