From 2c2ed79c761d2d117be78086f5e93664ed7bfa0f Mon Sep 17 00:00:00 2001 From: duffyduck Date: Mon, 3 Aug 2026 13:32:28 +0200 Subject: [PATCH] Transfer-Laufwerke auch aus der Optionsmaske heraus verwalten Wer merkt, dass ihm ein Laufwerk fehlt, merkt es genau dort - beim Blick auf "Transfer-Laufwerke: keine". Bisher schickte der Hinweistext ihn dafuer zwei Ebenen zurueck in die Uebersicht. Jetzt oeffnet v die Verwaltung direkt aus der Maske, und beim Zurueckkommen steht der Balken auf der Auswahlzeile - also da, wo man das eben Angelegte gleich anhaken will. Co-Authored-By: Claude Opus 5 (1M context) --- README.md | 2 +- pvesnap/recovery_ui.py | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 696d68f..5a99957 100644 --- a/README.md +++ b/README.md @@ -790,7 +790,7 @@ und im Notfall nur noch aus einer Liste auswählst. ``` pvesnap-recovery - v Übersicht der Laufwerke + v Übersicht der Laufwerke (geht auch aus der Optionsmaske heraus) n "dumps", 20G ← einmalig Enter Commander: Werkzeuge hineinkopieren q q diff --git a/pvesnap/recovery_ui.py b/pvesnap/recovery_ui.py index e89dd96..1a0aeb2 100644 --- a/pvesnap/recovery_ui.py +++ b/pvesnap/recovery_ui.py @@ -220,8 +220,8 @@ def _options(win, guest, spec): "das Austauschlaufwerk da.", "resume": "Snapshots mit Arbeitsspeicher laufen genau dort weiter, wo " "sie standen - ohne Crash-Recovery.", - "transfers": "Vorbereitete Austauschmedien. Anlegen und befuellen " - "in der Uebersicht mit v .", + "transfers": "Vorbereitete Austauschmedien. Mit v anlegen und " + "befuellen, mit Enter auswaehlen.", "spice": "Zweiter Zugang ueber remote-viewer. Achtung: vertraegt " "sich nicht mit geladenem Arbeitsspeicher.", "usb": "Ein USB-Geraet vom eigenen Rechner in den Gast reichen - " @@ -236,6 +236,7 @@ def _options(win, guest, spec): for offset, line in enumerate(keybar( width, [("Pfeile", "Auswaehlen", "Wahl"), ("Enter/Leer", "Aendern", "Aendern"), + ("v", "Laufwerke verwalten", "Laufw."), ("F10", "Anlegen", "Anlegen"), ("q", "Abbrechen", "Abbr.")])): fill(win, height - 2 + offset, " " + line, curses.color_pair(C_FOOTER)) @@ -243,7 +244,14 @@ def _options(win, guest, spec): key = read_key(win) current_key, _label, kind, choices = rows[index] - if key == curses.KEY_UP: + if key in ("v", "V"): + # Von hier aus verwalten statt zwei Ebenen zurueckzugehen: wer + # merkt, dass ihm ein Laufwerk fehlt, merkt es genau an dieser + # Stelle. Danach steht der Balken auf der Auswahlzeile. + transfer_ui.screen(win, browse=_browse_transfer) + index = next((i for i, r in enumerate(rows) if r[2] == "transfers"), + index) + elif key == curses.KEY_UP: index = (index - 1) % len(rows) elif key == curses.KEY_DOWN: index = (index + 1) % len(rows)