from .. import TypeEnum, Environment, Arg, Builtin, evaluate, InterpretPanic from ..structs import * import subprocess import sys TERM = Environment() def interpretClear(symbol, args, env, ns): subprocess.run(["clear"]) return List([]) TERM.register("clear", Builtin("clear", interpretClear, [], return_type=Type(":list"))) def interpretReadLine(symbol, args, env, ns): ret = input(args[0].value) return String(ret) TERM.register("read-line", Builtin("read-line", interpretReadLine, [Arg("prompt", TypeEnum.STRING)], return_type=Type(":string"))) def interpretReadChar(symbol, args, env, ns): 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")) TERM.register("read-char", Builtin("read-char", interpretReadChar, [], return_type=Type(":string")))