Detektieren von Mausklicks im Terminal (kein windows Management da Ubuntu Server Edition)



  • Hallo,

    ich versuche schon seit Tagen ein ziemlich einfachens Problem zu loesen. Ich moechte in einer Terminalumgebung (keine Desktop Variante mit Windosmanagement)
    auf Mausklicks reagieren. Dabei habe ich mir gedacht das ncurses die beste Wahl ist aber leider funktioniert mein Beispiel nicht.
    Ich wuerde mich freuen falls jemand einen Rat hat.

    Hier ist der nichtfunktionierende Code

    #include <ncurses.h>
    
    int main(int argc, char **argv){
    
    while(1)
    {
    
        mousemask( ALL_MOUSE_EVENTS, NULL);
            int c = getch();
            MEVENT event;
            switch(c)
            {
                case KEY_UP:
                    printf("keyup");
                    break;
                case KEY_DOWN:
                    printf("keydown");
                    break;
                case KEY_MOUSE:
                    if(getmouse(&event) == OK)
                    {
                        if(event.bstate & BUTTON1_PRESSED) // This works for left-click
                        {
                            printf("button1");
                        }
                        else if(event.bstate & BUTTON2_PRESSED) // This doesn't capture right-click
                        {
                            printf("button2");
                        }
                        else
                            printf("Event: %i", event.bstate); // Doesn't print anything on right-click
                    }
                    break;
            }
    }
    return 0;
    }
    


  • Was genau meinst du mit "funktioniert nicht"? Kompiliert nicht? Tut nicht was es soll? (Inwiefern nicht?) …

    Arbeite dich mal von dem Listing hier rückwärts:
    http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/mouse.html



  • Oh, sorry, Kommentare überlesen.

    Ist BUTTON2 nicht das Scrollrad? (Bzw. eben die mittlere Maustaste.)



  • Gerade gegoogelt um die Maustastensache zu checken.

    Du hast deinen Code von hier kopiert, oder?
    http://stackoverflow.com/questions/11301883/c-using-ncurses-to-capture-mouse-clicks-on-a-console-application

    Warum? Warum stellst du die gleiche Frage nochmal?



  • Das Programm kompiliert, nur leider wird kein Text beim Tastendruck ausgegeben.

    Zunaechst geht es darum ueberhaupt eine Reaktion zu erreichen. Das Programm reagiert aber leider auf keinen Tastendruck, egal welchen man nimmt. Habe es ach mit Buttton3 versucht ohne Erfolg.

    Bei der Frage von Stackoverflow funktioniert zumindest die linke Maustaste bei mir gar nichts. Was noch verwirrender ist.

    Die Seite von ncurses http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/mouse.html ist ja im Prinzip der Code den ich benutze (mit dem Unterschied das dort wgetch(window) verwendet wird und ich getch(), da ich nur eine Terminal Umgebung verwende)

    Wuerde mich ueber weitere Tipps freuen.


Anmelden zum Antworten