CudaText-Plugin: „Disk Wins“ (Auto-Neuladen bei externer Änderung erzwingen)

CudaText verfügt über keine integrierte Option, die eine Datei automatisch neu lädt, sobald sie geöffnet wird Änderungen auf der Festplatte – jeder integrierte Modus „Auf Festplatte geändert“ zeigt immer noch einige an Art der Eingabeaufforderung (modal oder modallos) vor dem Neuladen (siehe „ui_notif_confirm“ in „default.json“, Werte „0“–„4“, alle davon fragen). Dieses Plugin schließt diese Lücke: Festplatte gewinnt immer, keine Eingabeaufforderung, nie.

Hier archiviert, damit niemand dafür die CudaText-Plugin-API neu ableiten muss wieder. Die Quelle der Wahrheit für das Plugin selbst liegt darin cuda_disk_wins/ in diesem Ordner.

Was es tut

  • Fragt jede geöffnete, benannte Datei einmal pro Sekunde ab (konfigurierbar über TIMER_INTERVAL in __init__.py). – Wenn sich die mtime einer Datei auf der Festplatte ändert, liest das Plugin sie erneut und ruft auf Editor.set_text_all()überschreibt alle nicht gespeicherten Änderungen in der Editor-Tab, ohne zu fragen.

  • Löscht anschließend das „modified“-Flag („PROP_MODIFIED = False“), sodass die Die Registerkarte sieht sauber aus, als ob nie etwas auseinandergegangen wäre.

  • Best-Effort stellt die Caret-Position und die obere sichtbare Linie danach wieder her neu laden.

  • Fügt zwei Befehle unter „Plugins → Disk Wins“ hinzu:

  • „Automatisches Neuladen ein-/ausschalten“.

  • „Jetzt prüfen“ (manuelle einmalige Prüfung)

Warum ein Plugin statt einer Einstellung

CudaTexts eigener Datei-Watcher („ui_notif“) bietet immer nur „Ask“-Verhalten:

ui_notif_confirm

Verhalten

0

modallose Eingabeaufforderung, immer

1

Eingabeaufforderung ohne Modal, wenn Editor geändert oder Rückgängig nicht leer

2

Eingabeaufforderung ohne Modal, wenn der Editor sie geändert hat

3

modale Eingabeaufforderung, immer

4

modale Eingabeaufforderung, wenn der Editor geändert wurde

Es gibt keinen Wert, der „Automatisch neu laden, keine Aufforderung, weitermachen“ bedeutet. Daher dieses kleine Plugin, das seine eigene Polling-Schleife ausführt und neu lädt direkt über die Python-API.

Installation

mkdir -p ~/.config/cudatext/py
cp -r cuda_disk_wins ~/.config/cudatext/py/

Starten Sie CudaText neu.

Wichtig: Deaktivieren Sie dazu auch den eigenen Änderungsbenachrichtigungsdialog von CudaText es kämpft nicht mit dem Plugin. In ~/.config/cudatext/settings/user.json:

{
    "ui_notif": false
}

(Entspricht „Optionen → Einstellungen – Benutzerkonfiguration“ in der Benutzeroberfläche.) Starten Sie neu CudaText nach dieser Änderung erneut.

Vorbehalte

– Dies ist absichtlich destruktiv: Nicht gespeicherte Editor-Änderungen werden verworfen stillschweigend, sobald sich die Datei von außen ändert. Das ist das Ganze Punkt des Plugins – installieren Sie es nicht, wenn Sie es manchmal behalten möchten lokale Änderungen über externe Änderungen.

  • Reagiert nur auf Änderungen in der mtime der Datei; Eingabe im Editor selbst löst kein Nachladen aus (keine Rückkopplungsschleife).

  • Wenn die Datei extern gelöscht wird, unternimmt das Plugin bis dahin nichts erscheint wieder (kein Absturz, keine wiederholten Neuladeversuche).

  • Die Kodierung wird über „PROP_ENC“ gelesen und dem nächstgelegenen Python-Codec zugeordnet; Erweitern Sie „ENC_MAP“ in „init.py“, wenn Sie eine Kodierung verwenden, die noch nicht vorhanden ist aufgeführt.

Herkunft

Entwickelt für den „Dateisystemänderungen stets dem nicht gespeicherten Editor vorziehen“. Puffer, keine Bestätigung“-Anforderung, die beim Einrichten von CudaText besprochen wurde über yay -S cudatext-qt6-bin python auf Arch.