С помощью 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 может быть архаичным, но это только усложняет понимание того, как правильно его использовать.
Ожидаемое поведение здесь заключается в том, что после вызова ncurses_reset_shell_mode()
или же ncurses_reset_prog_mode()
окно оболочки или программы должно вернуться к своему ранее сохраненному состоянию, как это было раньше.
Фактическое поведение, по-видимому, заключается в том, что оболочка является нарушенным состоянием при выходе. Курсор не мигает, набор текста ничего не показывает в терминале. Тем не менее, терминал получает ввод правильно, потому что набор команд и нажатие клавиши ввода по-прежнему работает.
php ncurses это обертка вокруг Ncurses. Функции, о которых вы спрашиваете, более подробно описаны на страницах справочника ncurses, например: curs_kernel (3x). Это говорит о том, что эти функции сохранить / восстановить режимы терминала. Они соответствуют настройкам curses в termios (настройки терминала ввода / вывода).
Настройки ввода / вывода для терминала не включают мигающий курсор (это делается с помощью специальной управляющей последовательности для терминала). Для эха, страница справочника может помочь:
def_prog_mode
а такжеdef_shell_mode
процедуры спасти
текущие режимы терминала как «программа» (в проклятиях) или
состояние «shell» (не в curses) для использованияreset_prog_mode
а такжеreset_shell_mode
Подпрограммы. Готово
каждый контекст экрана выделяется newterm ().
Когда начинается ncurses, например, initscr
(ncurses_init()
), он сохраняет режим оболочки и инициализирует режим prog, в основном помещая терминал в сырье режим, чтобы лучше контролировать его.
Ваш звонок в ncurses_def_shell_mode();
ncurses_reset_shell_mode();
,Дальнейшее чтение:
ncurses_init()
определено.Других решений пока нет …