Nachdem die Pakete aktualisiert wurden, ändert sich der Speicherort der geladenen Elisp-Dateien in den Ordner der neuen Version des Pakets.
Yasnippet versucht, Snippets für die Datei, in der es installiert wurde, träge zu laden, wenn ich eine Datei in einem Hauptmodus öffne, den Yasnippet zuvor noch nicht gesehen hat.
Dies bedeutet, dass das Laden von Dingen mit zuvor nicht sichtbaren Hauptmodi nach der Aktualisierung von emacs fehlschlägt, da yasnippet das Ganze durch die Beschwerde über "keine solche Datei oder kein solches Verzeichnis" zerstört.
Gibt es eine gute allgemeine Möglichkeit, dies zu lösen, z. B. nicht zuzulassen, dass Updates Probleme verursachen? (Ich bekomme ein ähnliches, aber weniger langwieriges Problem, wenn ag aktualisiert wird). Wäre es alternativ ein besserer Plan, etwas in yasnippet zu empfehlen, nur die Fehler zu verschlucken, damit es nur warnt, anstatt Fehler zu machen, wenn es keine Pakete laden kann?
Klärung:
- Ich starte Emacs und Yasnippet wird geladen.
- Ich lade keine Dateien, deren Hauptmodus (zum Beispiel) Makefiles sind.
- Ich aktualisiere mit dem Paketmanager auf eine neue Version von yasnippet
- Ich lade ein Makefile und yasnippet versucht, die Snippets für Makefiles zu laden, aber es schlägt fehl, da der Ordner, den es für Snippets verwendet hat, nicht mehr existiert. Nicht nur das, sondern praktisch jeder andere Befehl schlägt fehl, da der von yasnippet installierte Pre-Hook für sie fehlschlägt.
- Problemumgehung: Öffnen Sie den Nachrichtenpuffer, suchen Sie, welcher Ordner nicht geöffnet werden kann, und führen Sie ihn aus
mkdir ~/.blargh/folder-yasnippet-wants
.
Natürlich könnte man einige Ratschläge für ein bisschen Yasnippet schreiben, aber ich hoffe auf eine globalere Lösung (und es würde eine Weile dauern, mit Elisp zu spielen, um die Ratschläge zum Laufen zu bringen, da bin ich mir sicher).
package.el
einwandfrei arbeiten möchten und wahrscheinlich nach einer entsprechenden Lösung suchen. Ich persönlich werde ungeklebt, wenn Dinge kaputt gehen, und reduziere die Wahrscheinlichkeit eines Bruchs, indem ich Bibliotheken an einem völlig anderen Ort platziere. In einigen Fällen ändere ich sogar alle Namen, indem ich der Bibliothek ein Präfix hinzufüge - z. B. auflawlist-...
diese Weise nichts Pausen mit Ausnahme einer geänderten Funktion des Emacs-Teams - z. B. eines neuen Arguments für eine vorhandene Funktion usw. Ich habe sie an eineyasnippet.el
andere Stelle kopiert , aus dem Paketmanager entfernt und mich nie darum gekümmert.Antworten:
Was ich mache, ist ein wenig komplex: Ich rate der Funktion
package-activate
, dass Emacs jedes Mal, wenn ein Paket aktiviert wird, nach einer aufgerufenen Datei sucht[package]-conf.el
und dieseload
stattdessen mit ausführtrequire
, damit sie mehrmals ausgeführt werden kann.Und in meinem
pkg-configs/yasnippet-conf.el
setze ich dieyas-snippet-dirs
Variable so, dass sie darauf hinweist, wo sich dasyasnippet
Paket befindet:kzn-path
ist eine Funktion, mit der ich meine benutzerdefinierten Verzeichnisse nach Symbolen finde. Sie können es für Verzeichnisse ersetzen.All dies wird direkt aus meinen Konfigurationsdateien kopiert. Ich denke, es ist alles, was Sie brauchen, oder es sollte Sie zumindest in die richtige Richtung weisen.
quelle