diff --git a/image_creator/dialog_main.py b/image_creator/dialog_main.py index 2a56a1c2a0238a39c6d1516a7e16cc2dd1573d8f..430f9c4e4210f53b62635745dfd23484cab8e52c 100644 --- a/image_creator/dialog_main.py +++ b/image_creator/dialog_main.py @@ -47,6 +47,7 @@ import textwrap import signal import optparse import types +import termios from image_creator import __version__ as version from image_creator.util import FatalError @@ -216,31 +217,7 @@ def _dialog_form(self, text, height=20, width=60, form_height=15, fields=[], return (code, output.splitlines()) -def main(): - - # In OpenSUSE dialog is buggy under xterm - if os.environ['TERM'] == 'xterm': - os.environ['TERM'] = 'linux' - - d = dialog.Dialog(dialog="dialog") - - # Add extra button in dialog library - dialog._common_args_syntax["extra_button"] = \ - lambda enable: dialog._simple_option("--extra-button", enable) - - dialog._common_args_syntax["extra_label"] = \ - lambda string: ("--extra-label", string) - - # Allow yes-no label overwriting - dialog._common_args_syntax["yes_label"] = \ - lambda string: ("--yes-label", string) - - dialog._common_args_syntax["no_label"] = \ - lambda string: ("--no-label", string) - - # Monkey-patch pythondialog to include support for form dialog boxes - if not hasattr(dialog, 'form'): - d.form = types.MethodType(_dialog_form, d) +def dialog_main(d): usage = "Usage: %prog [options] [<input_media>]" parser = optparse.OptionParser(version=version, usage=usage) @@ -286,8 +263,7 @@ def main(): out = CompositeOutput([log]) out.output("Starting %s v%s ..." % (parser.get_prog_name(), version)) - ret = create_image(d, media, out, options.tmp) - sys.exit(ret) + return create_image(d, media, out, options.tmp) except Reset: log.output("Resetting everything ...") continue @@ -297,6 +273,42 @@ def main(): except FatalError as e: msg = textwrap.fill(str(e), width=WIDTH) d.infobox(msg, width=WIDTH, title="Fatal Error") - sys.exit(1) + return 1 + + +def main(): + + # In openSUSE dialog is buggy under xterm + if os.environ['TERM'] == 'xterm': + os.environ['TERM'] = 'linux' + + d = dialog.Dialog(dialog="dialog") + + # Add extra button in dialog library + dialog._common_args_syntax["extra_button"] = \ + lambda enable: dialog._simple_option("--extra-button", enable) + dialog._common_args_syntax["extra_label"] = \ + lambda string: ("--extra-label", string) + + # Allow yes-no label overwriting + dialog._common_args_syntax["yes_label"] = \ + lambda string: ("--yes-label", string) + dialog._common_args_syntax["no_label"] = \ + lambda string: ("--no-label", string) + + # Monkey-patch pythondialog to include support for form dialog boxes + if not hasattr(dialog, 'form'): + d.form = types.MethodType(_dialog_form, d) + + # Save the terminal attributes + attr = termios.tcgetattr(sys.stdin.fileno()) + try: + ret = dialog_main(d) + finally: + # Restore the terminal attributes. If an error occurs make sure + # that the terminal turns back to normal. + termios.tcsetattr(sys.stdin.fileno(), termios.TCSADRAIN, attr) + + sys.exit(ret) # vim: set sta sts=4 shiftwidth=4 sw=4 et ai :