summaryrefslogtreecommitdiff
path: root/input_utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'input_utils.py')
-rw-r--r--input_utils.py33
1 files changed, 31 insertions, 2 deletions
diff --git a/input_utils.py b/input_utils.py
index d958db2..0b32eea 100644
--- a/input_utils.py
+++ b/input_utils.py
@@ -23,7 +23,23 @@ def single_keystroke_response(
default_response: str = None,
timeout_seconds: int = None,
) -> Optional[str]: # None if timeout w/o keystroke
- """Get a single keystroke response to a prompt."""
+ """Get a single keystroke response to a prompt and returns it.
+
+ Args:
+ valid_responses: a list of strings that are considered to be
+ valid keystrokes to be accepted. If None, we accept
+ anything.
+ prompt: the prompt to print before watching keystrokes. If
+ None, skip this.
+ default_response: the response to return if the timeout
+ expires. If None, skip this.
+ timeout_seconds: number of seconds to wait before timing out
+ and returning the default_response. If None, wait forever.
+
+ Returns:
+ The keystroke the user pressed. If the user pressed a special
+ keystroke like ^C or ^Z, we raise a KeyboardInterrupt exception.
+ """
def _handle_timeout(signum, frame) -> None:
raise exceptions.TimeoutError()
@@ -67,8 +83,18 @@ def single_keystroke_response(
def yn_response(prompt: str = None, *, timeout_seconds=None) -> Optional[str]:
- """Get a Y/N response to a prompt."""
+ """Get a Y/N response to a prompt.
+ Args:
+ prompt: the user prompt or None to skip this
+ timeout_seconds: the number of seconds to wait for a response or
+ None to wait forever.
+
+ Returns:
+ A lower case 'y' or 'n'. Or None if the timeout expires with
+ no input from the user. Or raises a KeyboardInterrupt if the
+ user pressed a special key such as ^C or ^Z.
+ """
yn = single_keystroke_response(
["y", "n", "Y", "N"], prompt=prompt, timeout_seconds=timeout_seconds
)
@@ -86,6 +112,9 @@ def press_any_key(
def up_down_enter() -> Optional[str]:
+ """Respond to UP, DOWN or ENTER events for simple menus without
+ the need for curses."""
+
os_special_keystrokes = [3, 26] # ^C, ^Z
while True:
key = readchar.readkey()