This commit is contained in:
Kovid Goyal 2018-04-23 07:19:40 +05:30
parent 07e2d9175c
commit 92ca8ab9cc
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 17 additions and 5 deletions

View File

@ -50,15 +50,26 @@ def launch(args):
os.environ['KITTY_CONFIG_DIRECTORY'] = config_dir os.environ['KITTY_CONFIG_DIRECTORY'] = config_dir
from kittens.tui.operations import clear_screen, reset_mode from kittens.tui.operations import clear_screen, reset_mode
m = import_kitten_main_module(config_dir, kitten) m = import_kitten_main_module(config_dir, kitten)
result = m['start'](args) try:
result = m['start'](args)
finally:
sys.stdin = sys.__stdin__
print(reset_mode('ALTERNATE_SCREEN') + clear_screen(), end='') print(reset_mode('ALTERNATE_SCREEN') + clear_screen(), end='')
if result is not None: if result is not None:
import json import json
print('OK:', json.dumps(result)) data = json.dumps(result)
print('OK:', len(data), data)
sys.stderr.flush() sys.stderr.flush()
sys.stdout.flush() sys.stdout.flush()
def deserialize(output):
import json
if output.startswith('OK: '):
prefix, sz, rest = output.split(' ', 2)
return json.loads(rest[:int(sz)])
def run_kitten(kitten): def run_kitten(kitten):
import runpy import runpy
kitten = resolved_kitten(kitten) kitten = resolved_kitten(kitten)

View File

@ -498,7 +498,7 @@ class Boss:
SpecialWindow( SpecialWindow(
['kitty', '+runpy', 'from kittens.runner import main; main()'] + args, ['kitty', '+runpy', 'from kittens.runner import main; main()'] + args,
stdin=data, stdin=data,
env={'KITTY_COMMON_OPTS': json.dumps(copts)}, env={'KITTY_COMMON_OPTS': json.dumps(copts), 'PYTHONWARNINGS': 'ignore'},
overlay_for=w.id)) overlay_for=w.id))
overlay_window.action_on_close = partial(self.on_kitten_finish, w.id, end_kitten) overlay_window.action_on_close = partial(self.on_kitten_finish, w.id, end_kitten)
@ -510,8 +510,9 @@ class Boss:
def on_kitten_finish(self, target_window_id, end_kitten, source_window): def on_kitten_finish(self, target_window_id, end_kitten, source_window):
output = self.get_output(source_window, num_lines=None) output = self.get_output(source_window, num_lines=None)
if output.startswith('OK: '): from kittens.runner import deserialize
data = json.loads(output.partition(' ')[2].strip()) data = deserialize(output)
if data is not None:
end_kitten(data, target_window_id, self) end_kitten(data, target_window_id, self)
def input_unicode_character(self): def input_unicode_character(self):