Что конкретно делают ncurses_def_shell_mode () и ncurses_def_prog_mode ()?

С помощью 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() окно оболочки или программы должно вернуться к своему ранее сохраненному состоянию, как это было раньше.

Фактическое поведение, по-видимому, заключается в том, что оболочка является нарушенным состоянием при выходе. Курсор не мигает, набор текста ничего не показывает в терминале. Тем не менее, терминал получает ввод правильно, потому что набор команд и нажатие клавиши ввода по-прежнему работает.

5

Решение

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();,
  • это не имеет никакого эффекта: терминал остается в необработанном режиме с отключенным эхом.

Дальнейшее чтение:

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]