aboutsummaryrefslogtreecommitdiff
path: root/neb/std/term.py
blob: e7060056ce2a1bafe473d093c29c63efbc985ae0 (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
from ..structs import *
import subprocess
import sys

TERM = Environment()

def interpretClear(symbol, args, env, ns):
    subprocess.run(["clear"])
    return List([])

TERM.register("clear", Builtin(interpretClear, []))

def interpretReadLine(symbol, args, env, ns):
    ret = input(args[0].value)
    return String(ret)

TERM.register("read-line", Builtin(interpretReadLine, [Arg("prompt", TypeEnum.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(interpretReadChar, []))