Zastanawiam się, czy istnieje coś takiego jak ruchy myszy w NCurses i czy istnieje sposób ich złapania. Po Interfacing with the mouse (od NCurses programming HOWTO) wydaje się, że po włączeniu bitu REPORT_MOUSE_POSITION
w wywołaniu mousemask
, można rzeczywiście złapać zdarzenia ruchu myszy.Wydarzenia związane z ruchami myszy w NCurses
Próbowałem tego i nie działa. Mam coś takiego:
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);
}
...
Spodziewałem się, że kiedy poruszę kursorem myszy, zwiększę licznik zdarzeń. Ale tak się nie stało. Próbowałem również przenieść go, gdy przycisk myszy 1 jest wyłączony, aby zobaczyć, czy generuje zdarzenia "przeciągnij", a także nie zrobił nic. Pytanie brzmi, czy to po prostu problem z moim emulatorem terminala? A może nie rozumiem, co NCurses uważa za ruchy myszy? Wszystkie pozostałe zdarzenia myszy zostały odebrane (i mogę obsługiwać programy w konsoli korzystającej z myszy).
Próbowałem gnome-terminal, xterm i kilka innych rzeczy. Próbowałem również środowiska tekstowego (bez X) przechodząc do tty na moim komputerze z Linuksem (Fedora 15, Ctrl + Alt + F2) i to nie działało.
Na koniec, zakładając, że otrzymałem to prawo i te zdarzenia powinny zostać zgłoszone, co to jest pole bstate
z MEVENT
dla evenetu ruchu myszy?
Wielkie dzięki z góry!
Napisałem getchar in stackoverflow przypadkowo, mój prawdziwy kod użył getcha.Pominąłem odświeżenie po wpisaniu pseudokodu: P Tak, dziękuję - Twoja sugestia z xterm działała bardzo dobrze! –