2016-06-14 6 views
0

Ich kann nicht herausfinden, wie man einen einzelnen Tastendruck, wie ein einzelnes Zeichen oder einen Pfeil, oder Modifizierertasten wie Verschiebung aufzeichnet.Wie zeichne ich einen einzelnen Tastendruck in Scheme auf?

Die nächste Sache ist read-char, aber das wartet auf Sie zu drücken, bevor es die Eingabe sendet. Ich möchte den Tastendruck einfach registrieren und sofort weitergeben.

Falls dies implementierungsspezifisch ist, verwende ich Chez-Scheme.

Antwort

1

Wie erwähnt Drücken von Tasten sind systemspezifisch, sondern auf einem Linux oder BSD-System, das mit ziemlicher Sicherheit wird stty installiert hat, wird das tun, was Sie mit chez Schema wollen:

(system "stty --file=/dev/tty cbreak -echo") 
(let ([keyboard (open-input-file "/dev/tty")]) 
    (format #t "The key press was ~A~%" (read-char keyboard))) 
(system "stty --file=/dev/tty -cbreak echo") 
+0

Danke das ist, was ich gesucht habe! – Wysaard

1

Alles, was mit Tastenanschlägen zu tun hat, wird implementierungsspezifisch sein, da es im Schema-Standard nicht angesprochen wird. In Chez Scheme gibt es, soweit ich weiß, keine direkte Unterstützung für Tastenanschläge. Wenn Sie jedoch SWL (Scheme Widget Library) installieren, das zusammen mit Chez Scheme bereitgestellt wird, gibt es einen Befehl zum Lesen von Keypressen. Ich habe es nie benutzt und weiß nichts darüber.

+0

Hmm zu schlecht. Ich schätze, dann muss ich mich SWL ansehen. Thanks – Wysaard

+0

Es scheint, R6RS hat eine Möglichkeit zum Lesen und Schreiben von Dateien mit ungepufferten Ports, aber keine Funktion zum Aktivieren/Deaktivieren der Pufferung auf bereits geöffneten Ports. Vielleicht wird R7RS-large es haben. – Sylwester

+0

@Silvester: Port-Pufferung ist nicht das Problem, und es ungepuffert zu machen wird nicht helfen. Es ist die eigene Zeilenpufferung des Terminals, was das Problem ist. –