ncurses_def_shell_mode()和ncurses_def_prog_mode()到底做了什么?

时间:2016-09-10 13:33:44

标签: php ncurses php-ncurses

使用php ncurses,我很想知道具体是ncurses_def_shell_mode()ncurses_def_prog_mode()函数的具体内容。它们没有在PHP手册中记录,我在man ncurses中偶然发现的事情并没有帮助。

如果我拨打ncurses_def_shell_mode(),然后在调用ncurses_reset_shell_mode()之前使用ncurses_end()重置,endwin根据分机的来源应该在ncurses中调用<?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; ?> ,终端光标仍然以某种方式丢失。

ncurses_def_shell_mode()

我尝试使用和不使用ncurses_def_prog_mode()ncurses_reset_shell_mode(),但不管怎样,尽管正确调用了重置,但在退出时窗口仍未正确重置。我误解了这些功能应该如何工作?我能够挖掘出非常少的信息,以便更深入地了解它们的正确用法。

我知道ncurses可能过时,但这使得知道如何正确使用它变得更加困难。

此处的预期行为是,在调用ncurses_reset_prog_mode()或{{1}}之后,shell或prog窗口应该恢复到之前保存的状态。

实际行为似乎是shell在退出时处于破碎状态。光标不闪烁,键入不会显示终端中的任何内容。但是,终端正在正确接收输入,因为键入命令并按下输入仍然有效。

1 个答案:

答案 0 :(得分:2)

php ncursesncurses的包装器。您要询问的功能在ncurses手册页中有更详细的记录,例如curs_kernel(3x)。这表示这些功能可以保存/恢复终端模式。这些对应于termios中的curses设置(终端I / O设置)。

终端I / O设置不包括闪烁光标(使用终端特定的转义序列完成)。对于echo,manual page可以提供帮助:

  

def_prog_mode def_shell_mode 例程保存   当前的终端模式作为&#34;程序&#34; (在诅咒中)或   &#34;壳&#34; (不是在curses中)声明由 reset_prog_mode reset_shell_mode 例程使用。这个完成了   由newterm()分配的每个屏幕上下文。

当ncurses启动时,例如initscrncurses_init()),它会保存shell模式并初始化prog模式,基本上将终端置于 raw 模式更好地控制它。

致电ncurses_def_shell_mode();

  • prog-mode 保存为 shell-mode
  • &#34;使用ncurses_reset_shell_mode();恢复&#34; 时,
  • 没有效果:终端保持原始模式,且呼叫已禁用。

进一步阅读: