Perl Maus Events über ANSI-Escapesequenzen auslesen
Samuel fiedler
- perl
0 Rolf B0 MudGuard0 Samuel fiedler0 Samuel fiedler0 Rolf B0 Samuel fiedler0 Rolf B
Hallo an alle!
Ich lese mich gerade in Perl ein. Ich wollte einen Taschenrechner schreiben.
Dies habe ich (noch) nicht getan. Erstmal habe ich überlegt, dass ich sehr wahrscheinlich Mouse Events wie in JavaScript bräuchte. Soweit ich weiß, gibt es viele Module dafür. Ich würde aber lieber die ANSI-Escapesequenz für Mouse-Events benutzen, da ich finde, dass ein Modul (meistens für GUI) zu viel ist, um ganz simpel einen Mausklick festzustellen.
Ich habe schon recht viel recherchiert und ich finde so gut wie nichts oder mir sagen die Ergebnisse nichts.
Ich wäre für einen Tipp (oder ein kleines Beispiel) dankbar.
Au revoir Bonjour,
Samuel Fiedler
Hallo Samuel,
ANSI-Escapesequenz für Mouse-Events
So was gibt's?
Für ein Projekt zum Einstieg vielleicht etwas komplex...
Rolf
Hallo,
ANSI-Escapesequenz für Mouse-Events
So was gibt's?
genau das hab ich mich auch gerade staunend gefragt.
Für ein Projekt zum Einstieg vielleicht etwas komplex...
Kommt drauf an. Wenn es wirklich ein Modul gibt, das Maus-Events in Steuerzeichen-Sequenzen umwandelt und in stdin zur Verfügung stellt, eventuell für Semi-GUI-Anwendungen mit ncurses oder so ... dann könnte es vielleicht auch recht überschaubar bleiben.
Ich habe aber im Moment nicht die geringste Vorstellung, ob es das wirklich gibt und wenn ja, wie's funktioniert.
Immer eine Handbreit Wasser unterm Kiel
Martin
Hi,
Ich lese mich gerade in Perl ein. Ich wollte einen Taschenrechner schreiben.
Dies habe ich (noch) nicht getan. Erstmal habe ich überlegt, dass ich sehr wahrscheinlich Mouse Events wie in JavaScript bräuchte.
Erste Überlegung sollte sein: wie soll die Bedien-Oberfläche gestaltet werden?
Damit meine ich jetzt nicht, welches Bedien-Element wo platziert wird, sondern die Technik.
Also ob Du z.B. Perl/Tk Widgets benutzen willst oder wxPerl oder etwas anderes.
Daraus ergibt sich dann ggf., wie Du auf Maus-Events reagieren kannst.
cu,
Andreas a/k/a MudGuard
Hallo MudGuard!
Erste Überlegung sollte sein: wie soll die Bedien-Oberfläche gestaltet werden?
Ich wollte den Taschenrechner mit ASCII-Art (oder mit <STDIN>
) bauen.
Au revoir,
Samuel Fiedler
Hallo Samuel fiedler!
Ich habe eine mögliche Lösung in einer Man Page gefunden: console_codes(4) - Linux manual page (Abschnitt “Mouse tracking“)
Ich experimentiere mal rum.
Au revoir,
Samuel Fiedler
Hallo Samuel fiedler!
Kaum experimentiert man herum, kommt das nächste Problem:
Ich habe es jetzt prinzipiell geschafft, dass das Terminal (da der Taschenrechner in ASCII-Art gebaut ist) alle Mausklicks zum Standard Input sendet. Nun stehe ich vor dem nächsten Problem:
Wie kann ich in Perl die Eingabe, nachdem ich (bzw. das Terminal) eine bestimmte Zahl an Zeichen eingegeben habe (bzw. hat), abschicken?
Au revoir,
Samuel Fiedler
Hallo Samuel,
auf Konsolenebene ist es normalerweise so, dass es zwei Betriebsarten gibt: Line und Character (wie auch immer die im jeweiligen Kontext konkret heißen).
Im Line Mode sammelt das Betriebssystem oder die Shell die Zeichen ein, ermöglicht ggf. eine Nachbearbeitung und wenn man ENTER drückt, gibt's für das Programm eine Zeile vonn Eingaben.
Im Character Mode wird jedes Zeichen sofort an das Programm geschickt. Hat Vor- und Nachteile. Man kann auf jeden Tastendruck sofort reagieren - muss es aber eben auch. Eine zeilenweise Eingabe programmiert man dann selbst. Aber die brauchst Du für deinen Taschenrechner ja eher nicht.
Die Konsole ist in den meisten Programmierumgebungen zwischen diesen Modi umschaltbar. Wie das auf deinem Betriebssystem mit Perl geht, müsstest Du bitte selbst herausfinden. Ich bin dagegen imprägniert: es perlt von mir ab.
Je nach Betriebsart der Konsole muss man zumeist auch andere Funktionen verwenden, um davon zu lesen. Auch da müsstest Du recherchieren, wie das in Perl zu tun ist.
Rolf (nicht Rost)
Hallo Rolf B!
Vielen Dank für die Idee, dass man die Modi erstmal umschalten müsste.
Sogleich habe ich dafür auch eine ANSI-Escapesequenz gefunden [1].
Nun arbeite ich weiter. Bisher läuft alles gut.
Ich wollte eine Eingabe machen, die genau 6 Zeichen lang ist, weil das Terminal die Maus-Events mit einer Länge von 6 Zeichen absendet. Die 6 Zeichen bedeuten:
^[
)[
)M
)
= 32 - 32 = 0). Für den Fall, dass die Maustaste nicht 0 entspricht, wird alles übersprungen. Damit habe ich den Fehler behoben, dass ich bei einem Klick auf eine Zahl die Zahl zweimal verwendet wird (MouseUp & MouseDown)."
eine 2. ("
= 34 - 32 = 2)(
eine 8. ("
= 34 - 32 = 2)Die Kombination aus einer 2 und einer 8 wäre der Button 1 bei folgendem Display:
TASCHENRECHNER
==============
+---------------+
| |
| |
+---+---+---+---+
| 1 | 2 | 3 | + |
+---+---+---+---+
| 4 | 5 | 6 | - |
+---+---+---+---+
| 7 | 8 | 9 | * |
+---+---+---+---+
| . | 0 | = | / |
+---+---+---+---+
| BEENDEN |
+---------------+
2022 von Samuel Fiedler
Au revoir,
Samuel Fiedler
Irgendwie finde ich ANSI-Escapesequenzen toll. ↩︎
Hallo Samuel,
ich hatte eher die Perl-Seite im Sinn. Kurzes Fragen bei Tante Google lieferte mir diesen Stackoverflow Thread:
Rolf