使用php ncurses,我很想确切地了解ncurses_def_shell_mode()和ncurses_def_prog_mode()函数具体做了什么。他们没有记录在PHP手册中,我在man ncurses中偶然发现的一点也没有帮助。
如果我调用ncurses_def_shell_mode(),然后在调用ncurses_end()之前用ncurses_reset_shell_mode()重置,根据扩展的源应该在ncurses中调用endwin,那么终端游标仍然会丢失。
<?php
ncurses_init(); // start ncurses window
ncurses_def_shell_mode();
sleep(2); // print some stuff here
ncurses_reset_shell_mode();
ncurses_end(); // clean up and get out
exit;
?>我尝试了with和with,ncurses_def_shell_mode()和ncurses_def_prog_mode(),但不知怎么的,尽管正确地调用了reset,窗口在退出时还是没有被正确地重置。我是否误解了这些功能是如何工作的?我能够挖掘很少的信息来收集更多的关于它们的正确使用的洞察力。
我知道ncurses可能是过时的,但这只会使它更难知道如何正确地使用它。
这里的预期行为是,在调用ncurses_reset_shell_mode()或ncurses_reset_prog_mode()之后,shell或ncurses_reset_prog_mode()窗口应该回到以前保存的状态。
实际的行为似乎是外壳在退出时是一个破碎的状态。光标不会闪烁,键入不会显示终端中的任何内容。但是,终端正在正确地接收输入,因为输入命令和按回车仍然有效。
发布于 2016-09-10 19:12:05
php ncurses是诅咒的包装器。您所询问的函数在ncurses手册页面中有更详细的记录,例如内核(3x)。也就是说,这些函数保存/恢复终端模式。它们对应于termios中的诅咒设置(终端I/O设置)。
终端I/O设置不包括闪烁光标(这是使用终端特定转义序列完成的)。对于echo,手册页可以帮助:
def_prog_mode和def_shell_mode例程将当前的终端模式保存为“程序”(在诅咒中)或"shell“(不处于诅咒状态),以供reset_prog_mode和reset_shell_mode例程使用。这是由新学期()分配的每个屏幕上下文完成的。
当ncurses启动时,例如initscr (ncurses_init()),它保存shell模式并初始化prog模式,基本上将终端置于原始模式以更好地控制它。
你打给ncurses_def_shell_mode();的电话
ncurses_reset_shell_mode();“恢复”到此时,进一步读:
ncurses_init()。https://stackoverflow.com/questions/39426588
复制相似问题