linux - tutorial - nodelay curses python
Sin bloqueo getch(), ncurses (3)
Estoy teniendo algunos problemas para que getc () de ncurses se bloquee. ¿Parece que la operación predeterminada no es de bloqueo (o me he perdido alguna inicialización)? Me gustaría que funcione como getch () en Windows. He probado varias versiones de
timeout(3000000);
nocbreak();
cbreak();
noraw();
etc...
(No todos al mismo tiempo). Preferiría no usar (explícitamente) ninguna WINDOW
, si es posible. Un bucle while alrededor de getch (), verificando un valor de retorno específico también está bien.
De una página de manual (énfasis añadido):
Las rutinas de
timeout
ywtimeout
configuran el bloqueo o no bloqueo de lectura para una ventana determinada. Si eldelay
es negativo, se utiliza la lectura de bloqueo (es decir, espera indefinidamente la entrada).
La biblioteca de curses es un paquete. No puede simplemente sacar una rutina y esperar lo mejor sin inicializar correctamente la biblioteca. Aquí hay un código que bloquea correctamente en getch()
:
#include <curses.h>
int main(void) {
initscr();
timeout(-1);
int c = getch();
endwin();
printf ("%d %c/n", c, c);
return 0;
}
initscr()
llamar a initscr()
o newterm()
para inicializar los curses antes de que funcione. Esto funciona bien para mi:
#include <ncurses.h>
int main() {
WINDOW *w;
char c;
w = initscr();
timeout(3000);
c = getch();
endwin();
printf("received %c (%d)/n", c, (int) c);
}