Allow sending more than a screenful of output from a kitten

Also Fixes #4866
This commit is contained in:
Kovid Goyal
2022-03-23 14:33:53 +05:30
parent 49c335972f
commit 1be1864657
6 changed files with 16 additions and 24 deletions

View File

@@ -95,22 +95,15 @@ def launch(args: List[str]) -> None:
print(reset_mode(Mode.ALTERNATE_SCREEN) + clear_screen(), end='')
if result is not None:
import json
data = json.dumps(result)
print('OK:', len(data), data)
import base64
data = base64.b85encode(json.dumps(result).encode('utf-8'))
sys.stdout.buffer.write(b'\x1bP@kitty-kitten-result|')
sys.stdout.buffer.write(data)
sys.stdout.buffer.write(b'\x1b\\')
sys.stderr.flush()
sys.stdout.flush()
def deserialize(output: str) -> Any:
import json
if output.startswith('OK: '):
try:
prefix, sz, rest = output.split(' ', 2)
return json.loads(rest[:int(sz)])
except Exception:
raise ValueError(f'Failed to parse kitten output: {output!r}')
def run_kitten(kitten: str, run_name: str = '__main__') -> None:
import runpy
original_kitten_name = kitten