Skip to content
Snippets Groups Projects
Commit 77b92bac authored by Nikos Skalkotos's avatar Nikos Skalkotos
Browse files

Restore terminal attributes on exit

If a dialog widget exits in an abnormal way, we may end up having a
messed up terminal. Make sure that the terminal attributes are always
restored before the dialog-based version on snf-image-creator
terminates.
parent 843b2d17
No related branches found
No related tags found
No related merge requests found
...@@ -47,6 +47,7 @@ import textwrap ...@@ -47,6 +47,7 @@ import textwrap
import signal import signal
import optparse import optparse
import types import types
import termios
from image_creator import __version__ as version from image_creator import __version__ as version
from image_creator.util import FatalError from image_creator.util import FatalError
...@@ -216,31 +217,7 @@ def _dialog_form(self, text, height=20, width=60, form_height=15, fields=[], ...@@ -216,31 +217,7 @@ def _dialog_form(self, text, height=20, width=60, form_height=15, fields=[],
return (code, output.splitlines()) return (code, output.splitlines())
def main(): def dialog_main(d):
# 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)
usage = "Usage: %prog [options] [<input_media>]" usage = "Usage: %prog [options] [<input_media>]"
parser = optparse.OptionParser(version=version, usage=usage) parser = optparse.OptionParser(version=version, usage=usage)
...@@ -286,8 +263,7 @@ def main(): ...@@ -286,8 +263,7 @@ def main():
out = CompositeOutput([log]) out = CompositeOutput([log])
out.output("Starting %s v%s ..." % out.output("Starting %s v%s ..." %
(parser.get_prog_name(), version)) (parser.get_prog_name(), version))
ret = create_image(d, media, out, options.tmp) return create_image(d, media, out, options.tmp)
sys.exit(ret)
except Reset: except Reset:
log.output("Resetting everything ...") log.output("Resetting everything ...")
continue continue
...@@ -297,6 +273,42 @@ def main(): ...@@ -297,6 +273,42 @@ def main():
except FatalError as e: except FatalError as e:
msg = textwrap.fill(str(e), width=WIDTH) msg = textwrap.fill(str(e), width=WIDTH)
d.infobox(msg, width=WIDTH, title="Fatal Error") 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 : # vim: set sta sts=4 shiftwidth=4 sw=4 et ai :
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment