Konsolenbenutzereingabe wie eingegeben abrufen, char by char

Ich habe eine Konsolenanwendung in Elixir. Ich muss die Benutzereingaben per Tastendruck interpretieren. Zum Beispiel muss ich "q" als Befehl behandeln, um die Sitzung zu beenden, ohne dass der Benutzer explizit @ drücken mus⏎ a.k.a. "Wagenrücklauf".

IO.getn/2 wartet überraschenderweise auf das⏎ gedrückt werden, eine Eingabe puffern (ich bin fast sicher, dass diese Pufferung von der Konsole selbst erfolgt, aberman stty bietet keine Hilfe / kein Flag zum Deaktivieren der Pufferung.)

Mix.Utils Verwende die Endlosschleife, um Benutzereingaben auszublenden (im Grunde wird alle 1 ms eine Backspace-Steuersequenz an die Konsole gesendet)IEx code umschließt Aufrufe von Standard-Erlang'sio, das bietet die einzige Möglichkeit, einen Rückruf auf @ zu setzTa (für die automatische Vervollständigung.)

Meine Vermutung wäre, ich muss @ verwendPort, hänge es an @ :stdin und spawnen einen Prozess, um die Eingabe abzuhören. Leider stecke ich bei dem Versuch, Letzteres zu implementieren, fest, da ich mich an die aktuell ausgeführte Konsole anschließen muss, um keinen neuen Port für einen anderen Prozess zu erstellen (wie es @ istperfekt hier beschrieben.)

Am mir fehlt etwas auf der Hand, wie ich ein @ anhängen soPort zum aktuellen Prozess ’:stdin (was übrigens in @ aufgeführt iPort.list/0,) oder sollte ich die gesamte 3-Pipe-Architektur erstellt haben, um umzuleiten, was in @ eingegeben wur:stdin und was auch immer mein Programm willputs zu:stdout?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage