aboutsummaryrefslogtreecommitdiff
path: root/neb/std/term.py
diff options
context:
space:
mode:
Diffstat (limited to 'neb/std/term.py')
-rw-r--r--neb/std/term.py33
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, []))