fix: replace checkbox with numbered list + text input for package removal
This commit is contained in:
+15
-8
@@ -346,17 +346,24 @@ def select_packages() -> list[str]:
|
||||
seen.add(p)
|
||||
deduped.append(p)
|
||||
|
||||
# let user deselect individual packages
|
||||
# let user remove individual packages
|
||||
if deduped:
|
||||
console.print(f"\n [dim]{len(deduped)} packages from groups. Deselect any:[/]")
|
||||
deselected = questionary.checkbox(
|
||||
"Uncheck packages to remove (space=remove, enter=done):",
|
||||
choices=deduped,
|
||||
console.print(f"\n [dim]{len(deduped)} packages selected:[/]")
|
||||
for i, p in enumerate(deduped, 1):
|
||||
console.print(f" [cyan]{i:3}.[/] {p}")
|
||||
console.print()
|
||||
remove_input = questionary.text(
|
||||
"Remove packages? Enter numbers comma-separated (or empty to keep all):",
|
||||
default="",
|
||||
).ask()
|
||||
if deselected is None:
|
||||
if remove_input is None:
|
||||
sys.exit(0)
|
||||
deselected_set = set(deselected)
|
||||
deduped = [p for p in deduped if p not in deselected_set]
|
||||
if remove_input.strip():
|
||||
try:
|
||||
remove_idx = {int(x.strip()) - 1 for x in remove_input.split(",")}
|
||||
deduped = [p for i, p in enumerate(deduped) if i not in remove_idx]
|
||||
except ValueError:
|
||||
console.print(" [yellow]Invalid input, keeping all packages.[/]")
|
||||
|
||||
# custom packages
|
||||
console.print()
|
||||
|
||||
Reference in New Issue
Block a user