Me pregunto si hay eventos de movimiento del mouse en NCurses, y si hay alguna forma de detectarlos. Siguiendo el Interfacing with the mouse (del NCurses programming HOWTO) parece que al habilitar el bit REPORT_MOUSE_POSITION
en la llamada al mousemask
, uno puede detectar eventos de movimiento del mouse.Eventos de movimiento de mouse en NCurses
Así que lo intenté y parece que no funciona. Tengo algo como esto:
int ch, count=0;
mmask_t old;
initscr();
noecho();
cbreak();
mousemask (ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, &old);
keypad (stdscr, TRUE);
while ((ch = getchar()) != 'q')
{
count++;
if (ch == KEY_MOUSE)
{
MEVENT event;
assert (getmouse (&event) == OK);
mvprintw (0, 0, "Mouse Event!\n");
}
mvprintw (1, 1, "Event number %4d",count);
}
...
que esperaba que a medida que voy a pasar mi cursor del ratón, voy a ver el contador de eventos cada vez mayor. Pero no fue así. También traté de moverlo mientras el botón del mouse 1 está abajo para ver si genera eventos de "arrastre", y tampoco hizo nada. La pregunta es, si es simplemente un problema de mi emulador de terminal? ¿O tal vez estoy malinterpretando lo que NCurses considera como eventos de movimiento del mouse? Todos los demás eventos del mouse se recibieron (y puedo operar programas en la consola que usan el mouse).
Probé gnome-terminal, xterm y algunas otras cosas. También probé un entorno textual (sin X) yendo a los tty de mi máquina Linux (Fedora 15, Ctrl + Alt + F2) y eso no funcionó.
Finalmente, suponiendo que lo entiendo bien y esos eventos deben ser informados, ¿cuál es el campo bstate
de un MEVENT
para un movimiento de ratón evenet?
¡Muchas gracias de antemano!
Escribí getchar en stackoverflow accidentalmente, mi código real no usó getch.Me salté la actualización de nuevo cuando escribí el pseudo código aquí: P De todos modos, muchas gracias, ¡tu sugerencia con xterm funcionó muy bien! –