1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
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")))
|