miniterm: switch console mode in context manager
diff --git a/serial/tools/miniterm.py b/serial/tools/miniterm.py
index a88e23f..b388671 100644
--- a/serial/tools/miniterm.py
+++ b/serial/tools/miniterm.py
@@ -55,6 +55,17 @@
         self.output.write(s)
         self.output.flush()
 
+    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
+    # context manager:
+    # switch terminal temporary to normal mode (e.g. to get user input)
+
+    def __enter__(self):
+        self.cleanup()
+        return self
+
+    def __exit__(self, *args, **kwargs):
+        self.setup()
+
 
 if os.name == 'nt':
     import msvcrt
@@ -403,24 +414,23 @@
         elif c == '\x15':                       # CTRL+U -> upload file
             sys.stderr.write('\n--- File to upload: ')
             sys.stderr.flush()
-            self.console.cleanup()
-            filename = sys.stdin.readline().rstrip('\r\n')
-            if filename:
-                try:
-                    with open(filename, 'rb') as f:
-                        sys.stderr.write('--- Sending file {} ---\n'.format(filename))
-                        while True:
-                            block = f.read(1024)
-                            if not block:
-                                break
-                            self.serial.write(block)
-                            # Wait for output buffer to drain.
-                            self.serial.flush()
-                            sys.stderr.write('.')   # Progress indicator.
-                    sys.stderr.write('\n--- File {} sent ---\n'.format(filename))
-                except IOError as e:
-                    sys.stderr.write('--- ERROR opening file {}: {} ---\n'.format(filename, e))
-            self.console.setup()
+            with self.console:
+                filename = sys.stdin.readline().rstrip('\r\n')
+                if filename:
+                    try:
+                        with open(filename, 'rb') as f:
+                            sys.stderr.write('--- Sending file {} ---\n'.format(filename))
+                            while True:
+                                block = f.read(1024)
+                                if not block:
+                                    break
+                                self.serial.write(block)
+                                # Wait for output buffer to drain.
+                                self.serial.flush()
+                                sys.stderr.write('.')   # Progress indicator.
+                        sys.stderr.write('\n--- File {} sent ---\n'.format(filename))
+                    except IOError as e:
+                        sys.stderr.write('--- ERROR opening file {}: {} ---\n'.format(filename, e))
         elif c in '\x08hH?':                    # CTRL+H, h, H, ? -> Show help
             sys.stderr.write(self.get_help_text())
         elif c == '\x12':                       # CTRL+R -> Toggle RTS
@@ -446,12 +456,11 @@
             dump_port_list()
             sys.stderr.write('--- Enter port name: ')
             sys.stderr.flush()
-            self.console.cleanup()
-            try:
-                port = sys.stdin.readline().strip()
-            except KeyboardInterrupt:
-                port = None
-            self.console.setup()
+            with self.console:
+                try:
+                    port = sys.stdin.readline().strip()
+                except KeyboardInterrupt:
+                    port = None
             if port and port != self.serial.port:
                 # reader thread needs to be shut down
                 self._stop_reader()
@@ -477,16 +486,15 @@
         elif c in 'bB':                         # B -> change baudrate
             sys.stderr.write('\n--- Baudrate: ')
             sys.stderr.flush()
-            self.console.cleanup()
-            backup = self.serial.baudrate
-            try:
-                self.serial.baudrate = int(sys.stdin.readline().strip())
-            except ValueError as e:
-                sys.stderr.write('--- ERROR setting baudrate: %s ---\n'.format(e))
-                self.serial.baudrate = backup
-            else:
-                self.dump_port_settings()
-            self.console.setup()
+            with self.console:
+                backup = self.serial.baudrate
+                try:
+                    self.serial.baudrate = int(sys.stdin.readline().strip())
+                except ValueError as e:
+                    sys.stderr.write('--- ERROR setting baudrate: %s ---\n'.format(e))
+                    self.serial.baudrate = backup
+                else:
+                    self.dump_port_settings()
         elif c == '8':                          # 8 -> change to 8 bits
             self.serial.bytesize = serial.EIGHTBITS
             self.dump_port_settings()