aboutsummaryrefslogtreecommitdiff
path: root/neb/std/term.py
blob: e028b00e2d77b90ae222dc2bd0f26b780c2ed3d2 (plain)
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")))