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

She*_*rif 5 php ncurses php-ncurses

使用php ncurses,我很想知道具体是什么ncurses_def_shell_mode()和ncurses_def_prog_mode()功能.他们没有在PHP手册中记录,我所做的一点点man ncurses没有帮助.

如果我在调用之前调用ncurses_def_shell_mode()然后重置,根据扩展名的源应该调用ncurses,终端光标仍然以某种方式丢失.ncurses_reset_shell_mode()ncurses_end()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;
?>
Run Code Online (Sandbox Code Playgroud)

我想有和没有,ncurses_def_shell_mode()和ncurses_def_prog_mode(),但不知何故,窗口不退出正确重置尽管正确调用复位.我误解了这些功能应该如何工作?我能够挖掘出非常少的信息,以便更深入地了解它们的正确用法.

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

这里预期的行为是在调用之后ncurses_reset_shell_mode()或者ncurses_reset_prog_mode()shell或prog窗口应该恢复到之前保存的状态.

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

Tho*_*key 3

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

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

和 例程将当前终端模式保存为“程序”(在curses 中)或def_prog_mode “ def_shell_mode shell”(不在curses 中)状态,以供 和 例程 reset_prog_mode使用reset_shell_mode。这是由newterm()分配的每个屏幕上下文完成的。

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

您致电ncurses_def_shell_mode();

  • 将prog-mode保存 为 shell-mode,并且
  • 当使用“恢复”ncurses_reset_shell_mode();时,
  • 它没有任何作用:终端保持原始模式,禁用回显。

进一步阅读: