Merge pull request #528 from mwhudson/run_command_in_foreground
add a way to suspend the subiquity UI and run some other command
This commit is contained in:
commit
a5419081b9
|
@ -19,6 +19,7 @@ import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import struct
|
import struct
|
||||||
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import tty
|
import tty
|
||||||
|
|
||||||
|
@ -297,6 +298,28 @@ class Application:
|
||||||
os.write(pipe, b'x')
|
os.write(pipe, b'x')
|
||||||
fut.add_done_callback(in_random_thread)
|
fut.add_done_callback(in_random_thread)
|
||||||
|
|
||||||
|
def run_command_in_foreground(self, cmd, **kw):
|
||||||
|
screen = self.loop.screen
|
||||||
|
|
||||||
|
def run():
|
||||||
|
subprocess.run(cmd, **kw)
|
||||||
|
|
||||||
|
def restore(fut):
|
||||||
|
screen.start()
|
||||||
|
# Calling screen.start() sends the INPUT_DESCRIPTORS_CHANGED
|
||||||
|
# signal. This calls _reset_input_descriptors() which calls
|
||||||
|
# unhook_event_loop / hook_event_loop on the screen. But this all
|
||||||
|
# happens before _started is set on the screen, so hook_event_loop
|
||||||
|
# does not actually do anything -- and we end up not listening to
|
||||||
|
# stdin, obviously a defective situation for a console
|
||||||
|
# application. So send it again now the screen is started...
|
||||||
|
urwid.emit_signal(
|
||||||
|
screen, urwid.display_common.INPUT_DESCRIPTORS_CHANGED)
|
||||||
|
tty.setraw(0)
|
||||||
|
|
||||||
|
screen.stop()
|
||||||
|
self.run_in_bg(run, restore)
|
||||||
|
|
||||||
def _connect_base_signals(self):
|
def _connect_base_signals(self):
|
||||||
""" Connect signals used in the core controller
|
""" Connect signals used in the core controller
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue