Since this thing is on the innerwebs I suppose it should have a
[python_utils.git] / input_utils.py
index a989b2d6fe3db428d25a2de5b8baf6baef3c8734..77094daaa7a70cd83ebf0e2b5ba0adac311d2b01 100644 (file)
@@ -1,7 +1,10 @@
 #!/usr/bin/env python3
 
+# © Copyright 2021-2022, Scott Gasch
+
 """Utilities related to user input."""
 
+import logging
 import signal
 import sys
 from typing import List
@@ -10,6 +13,8 @@ import readchar  # type: ignore
 
 import exceptions
 
+logger = logging.getLogger(__file__)
+
 
 def single_keystroke_response(
     valid_responses: List[str],
@@ -34,6 +39,7 @@ def single_keystroke_response(
         try:
             while True:
                 response = readchar.readchar()
+                logger.debug('Keystroke: 0x%x', ord(response))
                 if response in valid_responses:
                     break
                 if ord(response) in os_special_keystrokes:
@@ -47,9 +53,10 @@ def single_keystroke_response(
         print(prompt, end="")
         sys.stdout.flush()
     try:
-        response = _single_keystroke_response_internal(
-            valid_responses, timeout_seconds
-        )
+        response = _single_keystroke_response_internal(valid_responses, timeout_seconds)
+        if ord(response) == 3:
+            raise KeyboardInterrupt('User pressed ^C in input_utils.')
+
     except exceptions.TimeoutError:
         if default_response is not None:
             response = default_response