我使用ruby curses包(ruby 2.1.5)。ruby:curses:不要在程序结束时清除屏幕?
在某些情况下,我想在屏幕不在我的节目结束被清除,从而使Curses.stdscr的最终内容仍然是我的终端,当程序退出上显示。
我试过把电话拨到Curses.close_screen,但终端屏幕在退出时仍然被清除。
有没有什么办法可以告诉ruby中的curses在程序终止时不清除屏幕?
预先感谢您。
我使用ruby curses包(ruby 2.1.5)。ruby:curses:不要在程序结束时清除屏幕?
在某些情况下,我想在屏幕不在我的节目结束被清除,从而使Curses.stdscr的最终内容仍然是我的终端,当程序退出上显示。
我试过把电话拨到Curses.close_screen,但终端屏幕在退出时仍然被清除。
有没有什么办法可以告诉ruby中的curses在程序终止时不清除屏幕?
预先感谢您。
捆绑红宝石诅咒模块缺少(许多)诅咒功能,如reset_shell_mode
,这将是通常的方式来做到这一点:
的
reset_prog_mode
和reset_shell_mode
例程恢复 终端“程序”(in curses)或“shell”(出于 curses)的状态。这些都是由endwin(3x) 自动完成,并在endwin
后,由doupdate
,所以他们通常是 不叫。
或者,您可以使用MRuby(它提供了该功能)。
在任何一种情况下,像这样退出都可以让您的终端的特殊键设置为application mode。解决方法是发送转义序列(在终端数据库中发现为rmkx
)。
我想通了:事实证明,如果我退出我的程序退出!而不是仅仅退出,没有任何curses的屏幕重置逻辑被调用,并且stdscr的最新内容仍保留在我的屏幕上。
我也做了以下调用Curses.init_screen前...
require 'termios'
$orig_termios = Termios.tcgetattr($stdin)
...我的退出前右发出这个命令! ...
Termios.tcsetattr($stdin, Termios::TCSANOW, $orig_termios)
(我要接受这个答案,但我不能这样做了2天。我会在那个时候这样做)。
实际上,MRuby看起来确实是最好的管理方式。将捆绑的curses中的函数列表与MRuby函数列表进行比较,可以看到ruby curses捆绑包中不少缺失的函数。我将开始将我的程序转换为使用MRuby,并在几天内回复。 – HippoMan
事实证明,我一直无法在我的Linux机器上获得MRuby的工作。 PDCurses不易编译,而且它也存在Linux ncurses的问题。最终,我可能会得到ncurses版本的工作,并重构一些MRuby代码,但现在我不需要那么做。在我的回答中所做的与额外的rmkx转义序列有关的内容目前为我完成了这项工作。 – HippoMan