如何使用Ruby在Curses中强制刷新

时间:2017-06-19 14:54:39

标签: ruby curses

我创建了一个主窗口win

win = Curses::Window.new(Curses.lines / 2, Curses.cols, 0, 0)

然后我有时需要创建一个覆盖主要窗口的消息窗口。关闭消息窗口后,我刷新了win

win.refresh

但除非我在主窗口中使用以下内容更改任何内容:

win.addstr("asd")

refresh不会重绘窗口。

有没有办法强制重绘窗口?

2 个答案:

答案 0 :(得分:0)

取决于。

使用 touchwin (或者Ruby绑定可能用于C函数的任何名称)完成。

ruby 2.0.0中,标准 curses绑定Ruby缺少touchwintouchline。奇怪的是,它包含了几个ncurses扩展(resizeterm,鼠标接口,默认颜色)的绑定,但缺少许多标准功能(请参阅X/Open Curses以供参考)。

在2.4.1中,curses不是标准的Ruby模块,但site for the module确实有touchwin

答案 1 :(得分:0)

有一个方法Curses::Window#touch,它将窗口标记为已更改并由下一个refresh重绘。还有方法Curses::Window#redraw,它只是重绘窗口。

其他问题是getch方法,如果我使用Curses.getch,在我的程序中有点不可预测 - 有时会导致窗口不刷新,有时会导致整个屏幕消失...窗口对象上的getch解决了问题,例如win.getch