fixed initial problems
This commit is contained in:
@@ -85,9 +85,11 @@ def render(outputs):
|
||||
lines = [
|
||||
MARKER,
|
||||
f"# generiert am {datetime.now().isoformat(timespec='seconds')}",
|
||||
"# Quelle: wlr-randr (live). Feintuning: wdisplays oder Hand-Edit",
|
||||
"# (Hand-Edit: Marker-Zeile loeschen, dann fasst --apply-if-managed",
|
||||
"# diese Datei nicht mehr an.)",
|
||||
"# Quelle: wlr-randr (live). Feintuning: wdisplays oder Modus direkt",
|
||||
"# in dieser Datei anpassen - bei unveraendertem Output-Set bleibt",
|
||||
"# die Datei (inkl. deiner Modus-Tweaks) bei jedem Login erhalten.",
|
||||
"# Neu generiert wird nur bei geaendertem Output-Set (Docking) oder",
|
||||
"# per --apply. Marker-Zeile loeschen = ganz hand-gepflegt.",
|
||||
"",
|
||||
]
|
||||
externals = [o for o in outputs if not o["internal"]]
|
||||
@@ -146,13 +148,28 @@ def apply(text):
|
||||
print(f"Geschrieben: {CONFIG_PATH}")
|
||||
|
||||
|
||||
def config_output_names(path: Path):
|
||||
"""Output-Namen aus einer bestehenden kanshi-Config (ohne '*' Fallback)."""
|
||||
names = set()
|
||||
try:
|
||||
for line in path.read_text().splitlines():
|
||||
parts = line.strip().split()
|
||||
if len(parts) >= 2 and parts[0] == "output" and parts[1] != "*":
|
||||
names.add(parts[1].strip("'\""))
|
||||
except OSError:
|
||||
pass
|
||||
return names
|
||||
|
||||
|
||||
def main(argv):
|
||||
outputs = detect_outputs()
|
||||
if not outputs:
|
||||
print("WARN: keine Outputs erkannt - schreibe Fallback-Config", file=sys.stderr)
|
||||
print("WARN: keine Outputs erkannt", file=sys.stderr)
|
||||
text = render(outputs)
|
||||
# Default ohne Schreib-Flag: nur anzeigen, nichts schreiben (sicher).
|
||||
if "--print" in argv or ("--apply" not in argv and "--apply-if-managed" not in argv):
|
||||
if not outputs:
|
||||
print("# (Fallback-Anteil, da keine Outputs erkannt)", file=sys.stderr)
|
||||
print(text)
|
||||
if outputs:
|
||||
print(
|
||||
@@ -160,9 +177,25 @@ def main(argv):
|
||||
file=sys.stderr,
|
||||
)
|
||||
return 0
|
||||
if "--apply-if-managed" in argv and not is_managed(CONFIG_PATH):
|
||||
print(f"{CONFIG_PATH} ist hand-gepflegt - lasse sie unangetastet.")
|
||||
return 0
|
||||
if "--apply-if-managed" in argv:
|
||||
if not CONFIG_PATH.exists():
|
||||
apply(text) # Erst-Login: anlegen
|
||||
return 0
|
||||
if not is_managed(CONFIG_PATH):
|
||||
print(f"{CONFIG_PATH} ist hand-gepflegt - lasse sie unangetastet.")
|
||||
return 0
|
||||
if not outputs:
|
||||
# Erkennung fehlgeschlagen -> niemals eine gute Config clobbern.
|
||||
print("WARN: Erkennung fehlgeschlagen - lasse verwaltete Config unangetastet.",
|
||||
file=sys.stderr)
|
||||
return 0
|
||||
if {o["name"] for o in outputs} == config_output_names(CONFIG_PATH):
|
||||
# Gleiches Output-Set (z.B. jeden Boot dieselbe VM-Anzeige):
|
||||
# Modus-Tweaks des Users bleiben erhalten, kein Rewrite.
|
||||
print(f"Outputs unveraendert ({', '.join(sorted(config_output_names(CONFIG_PATH)))})"
|
||||
" - behalte Config (inkl. Modus-Tweaks) bei.")
|
||||
return 0
|
||||
# Output-Set geaendert (angedockt/abgedockt): neu generieren.
|
||||
apply(text)
|
||||
return 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user