Estoy haciendo una aplicación de consola para plataformas Unix, y estoy usando la biblioteca de curses (o ncurses) para manejar la entrada del teclado y el mouse. El problema es que he encontrado muy poca documentación sobre cómo usarlo exactamente para eso, aparte de this page y this one, que no tienen ejemplos muy detallados. He logrado capturar el clic izquierdo, pero no puedo hacer que funcione con el clic derecho porque el menú de opciones para el emulador de terminal aparece en la ubicación del cursor, pero la aplicación no procesa el evento. ¿Cómo puedo evitar esto y tener el evento capturado en la aplicación?Uso de ncurses para capturar clics del mouse en una aplicación de consola
que tienen la siguiente línea para la configuración de los eventos del ratón:
// Set up mouse event throwing
mousemask(BUTTON1_PRESSED | BUTTON2_PRESSED, NULL);
Y en el método que procesa la entrada, tengo el siguiente:
int c = getch();
MEVENT event;
switch(c)
{
case KEY_UP:
... do stuff
break;
case KEY_DOWN:
... do stuff
break;
case KEY_MOUSE:
if(getmouse(&event) == OK)
{
if(event.bstate & BUTTON1_PRESSED) // This works for left-click
{
... do stuff
}
else if(event.bstate & BUTTON2_PRESSED) // This doesn't capture right-click
{
... do other stuff
}
else
fprintf(stderr, "Event: %i", event.bstate); // Doesn't print anything on right-click
}
break;
default:
return;
}
También he intentado configurar mousemask()
con la máscara ALL_MOUSE_EVENTS
, pero todavía no imprime ningún evento en la última cláusula else
, por lo que creo que el evento simplemente no se está disparando. Cualquier ayuda sobre esto sería muy apreciada.
Parece que su emulador de terminal no pasa el evento de clic derecho a la ventana del terminal. La mayoría de los emuladores tienen opciones que desactivan el manejo especial de los dispositivos de entrada y permiten pasar eventos directamente a la terminal. –
Bueno, he intentado ejecutarlo en varios terminales: el terminal predeterminado para Ubuntu 11.10, Guake, el terminal interno de NetBeans IDE, y ninguno de ellos funciona. ¿Sabes cómo podría configurar uno de esos para pasar los eventos a la aplicación? –
http://askubuntu.com/questions/21330/how-to-disable-right-right-click-menu-in-terminal para una pregunta similar, tiene una respuesta parcial, es decir, use xterm. –