diff options
Diffstat (limited to 'neb/std/term.py')
| -rw-r--r-- | neb/std/term.py | 33 | 
1 files changed, 33 insertions, 0 deletions
| diff --git a/neb/std/term.py b/neb/std/term.py new file mode 100644 index 0000000..e706005 --- /dev/null +++ b/neb/std/term.py @@ -0,0 +1,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, [])) | 
