From 0459ef120e1a7f23c259c35d3249b71120906fcc Mon Sep 17 00:00:00 2001 From: mryouse Date: Sun, 12 Jun 2022 01:18:41 +0000 Subject: implement read-char --- interpreter.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'interpreter.py') diff --git a/interpreter.py b/interpreter.py index a2d7b08..e2cf006 100644 --- a/interpreter.py +++ b/interpreter.py @@ -712,6 +712,20 @@ def interpretReadLine(symbol, args, env): GLOBALS.register("read-line", Builtin(interpretReadLine, [Arg("prompt", T.String, False, False)])) +def interpretReadChar(symbol, args, env): + import termios, tty + fd = sys.stdin.fileno() + old = termios.tcgetattr(fd) + try: + tty.setraw(fd) + ch = sys.stdin.buffer.read1(4) # some keys are >1 bytes + except Exception: + raise + finally: + termios.tcsetattr(fd, termios.TCSADRAIN, old) + return String(ch.decode("utf-8")) + +GLOBALS.register("read-char", Builtin(interpretReadChar, [])) def interpretAppend(symbol, args, env): lst = args[0] -- cgit v1.2.3