2016-09-10 14 views
5

Korzystanie z php ncurses, jestem ciekawy, aby zrozumieć, co dokładnie robią funkcje ncurses_def_shell_mode() i ncurses_def_prog_mode(). Nie są one udokumentowane w podręczniku PHP i nie pomogło mi to, o czym bardzo natknąłem się w man ncurses.Co dokładnie robią ncurses_def_shell_mode() i ncurses_def_prog_mode()?

Jeśli zadzwonię ncurses_def_shell_mode() a następnie zresetować z ncurses_reset_shell_mode() przed wywołaniem ncurses_end(), który w zależności od źródła tego rozszerzenia należy zadzwonić endwin w ncurses, terminal kursor jest nadal jakoś stracone.

<?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; 
?> 

Próbowałem i bez, ncurses_def_shell_mode() i ncurses_def_prog_mode(), ale jakoś okno nie zostało poprawnie zresetowane przy wyjściu mimo właściwie nazywając reset. Czy nie rozumiem, jak te funkcje mają działać? Udało mi się wykopać bardzo mało informacji, aby uzyskać lepszy wgląd w ich właściwe użycie.

Wiem, że ncurses może być archaiczna, ale to właśnie sprawia, że ​​o wiele trudniej jest wiedzieć, jak jej używać.

Spodziewane zachowanie polega na tym, że po wywołaniu ncurses_reset_shell_mode() lub ncurses_reset_prog_mode() okno powłoki lub prog powinno powrócić do wcześniej zapisanego stanu, tak jak było wcześniej.

Rzeczywistym zachowaniem wydaje się być to, że skorupa jest stanem zerwanym po wyjściu. Kursor nie miga, pisanie nie powoduje niczego w terminalu. Jednak terminal odbiera poprawnie dane wejściowe, ponieważ wpisywanie komend i naciśnięcie Enter nadal działa.

Odpowiedz

2

php ncurses to opakowanie o numerze ncurses. Funkcje, o które pytasz, są bardziej szczegółowo udokumentowane na stronach podręcznika ncurses, np. curs_kernel(3x). Oznacza to, że te funkcje zapisują/przywracają ustawienia trybów zacisków. Odpowiadają one ustawieniom curses w termios (ustawienia terminala I/O).

Ustawienia terminalu I/O nie obejmują migającego kursora (odbywa się to przy użyciu sekwencji eskejnej specyficznej dla terminala). Echo The manual page może pomóc:

W def_prog_mode i def_shell_mode procedury zapisać aktualnych trybów terminala "programem" (w przekleństwami) lub "shell" (nie w przekleństw) stanie do używać procedur rutynowych. Odbywa się to dla każdego kontekstu ekranu przydzielonego przez newterm().

Gdy rozpoczyna ncurses np initscr (ncurses_init()) zapisuje powłoki i trybu inicjuje tryb prog zasadniczo umieszczenie zacisku na RAW MODE lepiej kontrolować.

wezwanie do ncurses_def_shell_mode();

  • zapisuje prog-modejakshell-mode i
  • gdy "przywracanie" do korzystania ncurses_reset_shell_mode();,
  • ma brak efektu: terminal pozostaje w trybie surowym, z wyłączeniem echa.

Dalsze informacje:

Powiązane problemy