From c5ef13df5d63e486cdaa39e6160d3bf1ee59d98d Mon Sep 17 00:00:00 2001 From: CodeName393 Date: Thu, 26 Feb 2026 15:25:09 +0900 Subject: [PATCH] Update selector.py --- unshackle/core/utils/selector.py | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/unshackle/core/utils/selector.py b/unshackle/core/utils/selector.py index da2bb61..121e5ed 100644 --- a/unshackle/core/utils/selector.py +++ b/unshackle/core/utils/selector.py @@ -11,6 +11,7 @@ IS_WINDOWS = sys.platform == "win32" if IS_WINDOWS: import msvcrt + class Selector: """ A custom interactive selector class using the Rich library. @@ -25,7 +26,7 @@ class Selector: page_size: int = 8, minimal_count: int = 0, dependencies: dict[int, list[int]] = None, - collapse_on_start: bool = False + collapse_on_start: bool = False, ): """ Initialize the Selector. @@ -259,13 +260,13 @@ class Selector: if key == b"\xe0" or key == b"\x00": try: key = msvcrt.getch() - if key == b"H": # Arrow Up + if key == b"H": # Arrow Up return "UP" - if key == b"P": # Arrow Down + if key == b"P": # Arrow Down return "DOWN" - if key == b"K": # Arrow Left + if key == b"K": # Arrow Left return "LEFT" - if key == b"M": # Arrow Right + if key == b"M": # Arrow Right return "RIGHT" except Exception: pass @@ -309,27 +310,27 @@ class Selector: # ANSI Escape Sequences for Arrow Keys mapping = { - "\x1b[A": "UP", # Escape + [ + A - "\x1b[B": "DOWN", # Escape + [ + B - "\x1b[C": "RIGHT", # Escape + [ + C - "\x1b[D": "LEFT", # Escape + [ + D + "\x1b[A": "UP", # Escape + [ + A + "\x1b[B": "DOWN", # Escape + [ + B + "\x1b[C": "RIGHT", # Escape + [ + C + "\x1b[D": "LEFT", # Escape + [ + D } if char in mapping: return mapping[char] # Handling manual Escape sequences - if char == "\x1b": # ESC + if char == "\x1b": # ESC try: next1 = click.getchar() - if next1 in ("[", "O"): # Sequence indicators + if next1 in ("[", "O"): # Sequence indicators next2 = click.getchar() - if next2 == "A": # Arrow Up + if next2 == "A": # Arrow Up return "UP" - if next2 == "B": # Arrow Down + if next2 == "B": # Arrow Down return "DOWN" - if next2 == "C": # Arrow Right + if next2 == "C": # Arrow Right return "RIGHT" - if next2 == "D": # Arrow Left + if next2 == "D": # Arrow Left return "LEFT" return "CANCEL" except Exception: @@ -398,6 +399,7 @@ class Selector: except KeyboardInterrupt: return [] + def select_multiple( options: list[str], minimal_count: int = 1,