#!/usr/bin/env python3 """Eine Szene starten und den Bildschirm als Text zeigen - zum Nachsehen.""" import os import sys import time HERE = os.path.dirname(os.path.abspath(__file__)) # handbuch/werkstatt HANDBUCH = os.path.dirname(HERE) # handbuch REPO = os.path.dirname(HANDBUCH) # Projektwurzel sys.path.insert(0, HERE) from shot import Terminal # noqa: E402 TASTEN = {"ab": "\x1bOB", "auf": "\x1bOA", "rechts": "\x1bOC", "links": "\x1bOD", "enter": "\r", "tab": "\t", "esc": "\x1b", "f2": "\x1bOQ", "f3": "\x1bOR", "f5": "\x1b[15~", "f7": "\x1b[18~", "f9": "\x1b[20~", "space": " "} def umgebung(): env = dict(os.environ) env["PATH"] = os.path.join(HERE, "bin") + ":" + env["PATH"] env["PVESNAP_DEMO_STATE"] = os.path.join(HERE, "demo", "state.json") # ncurses zeichnet Rahmen sonst ueber den Ersatzzeichensatz (ESC ( 0). Der # Bildschirmnachbau ignoriert das im UTF-8-Betrieb, und aus den Linien # wuerden Buchstaben. So kommen echte Unicode-Rahmenzeichen heraus. env["NCURSES_NO_UTF8_ACS"] = "1" env["PVESNAP_SRC"] = os.environ.get("PVESNAP_SRC", REPO) env["PYTHONPATH"] = env["PVESNAP_SRC"] return env # Dieselbe Umgebung, die auch bauen.sh benutzt - dort wird pyte nachinstalliert. VENV = os.path.join(HANDBUCH, ".venv", "bin", "python") def befehl(szene): """Die Aufnahme laeuft in einem eigenen Mount-Namensraum - siehe stage.sh.""" return ["unshare", "-r", "-m", "--propagation", "private", os.path.join(HERE, "stage.sh"), szene] def starte(szene, cols=100, rows=30): env = umgebung() env["DOKU"] = HERE env["PY"] = VENV return Terminal(befehl(szene), cols=cols, rows=rows, env=env, cwd=HERE) if __name__ == "__main__": szene = sys.argv[1] tasten = [TASTEN.get(t, t) for t in sys.argv[2:]] term = starte(szene, cols=int(os.environ.get("COLS", 100)), rows=int(os.environ.get("ROWS", 30))) try: time.sleep(1.2) term.settle() term.send(tasten, pause=0.3) time.sleep(0.3) term.settle() for line in term.screen.display: print("|" + line.rstrip() + "|") finally: term.close()