😏
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Enter an allocated pseudo-terminal and invoke the real MMO TUI launcher."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import fcntl
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import termios
|
||||
|
||||
from mmo_runtime import launch_interactive
|
||||
|
||||
|
||||
def main() -> int:
|
||||
try:
|
||||
# Popen(start_new_session=True) made this process a session leader. The
|
||||
# slave PTY descriptors were inherited, so explicitly claim the terminal
|
||||
# before MMO performs normal foreground process-group handoff.
|
||||
fcntl.ioctl(sys.stdin.fileno(), termios.TIOCSCTTY, 0)
|
||||
os.tcsetpgrp(sys.stdin.fileno(), os.getpgrp())
|
||||
initial = termios.tcgetattr(sys.stdin.fileno())
|
||||
exit_code = launch_interactive(profile=sys.argv[1], cwd=sys.argv[2])
|
||||
restored = termios.tcgetattr(sys.stdin.fileno())
|
||||
print(
|
||||
json.dumps(
|
||||
{
|
||||
"event": "launcher_returned",
|
||||
"exit_code": exit_code,
|
||||
"echo_enabled": bool(restored[3] & termios.ECHO),
|
||||
"attributes_restored": restored == initial,
|
||||
"pgrp": os.getpgrp(),
|
||||
"foreground_pgrp": os.tcgetpgrp(sys.stdin.fileno()),
|
||||
},
|
||||
sort_keys=True,
|
||||
),
|
||||
flush=True,
|
||||
)
|
||||
return exit_code
|
||||
except BaseException as exc:
|
||||
print(json.dumps({"event": "launcher_error", "error": repr(exc)}), flush=True)
|
||||
return 97
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user