Weiße Liste von .dir-local.el

7

Ist es möglich , zu laden .dir-locals.elDatei ohne Aufforderung mich, aber auch ohne Wert addiert ich in dieser Datei zu meiner bin Konfiguration init.elin custom-set-variables? Der Grund, warum ich es möchte, ist, dass diese Datei einige vertrauliche Daten enthält und ich die Gewohnheit habe, meine zu teilen init.el, also möchte ich, dass sie nur geladen wird. Ich verstehe, dass im Allgemeinen .dir-locals.elmöglicherweise unangemessener Code enthalten ist, den ich nicht bewerten sollte. Also dachte ich, dass es wahrscheinlich so etwas wie eine Whitelist von gibt .dir-locals.el.

Aktualisieren

Im Allgemeinen möchte ich eine 'projektweite' Emacs-Konfigurationsdatei haben, die ohne zusätzlichen Aufwand geladen wird. Wenn es also nicht möglich ist mit .dir-locals.el- bin ich offen für andere Lösungen: D.

d12 gefrostet
quelle

Antworten:

5

Ich habe dies zu meiner init.el hinzugefügt:

(defun recursive-load-dir-settings (currentfile)
  (let ((lds-dir (locate-dominating-file currentfile "settings.el")))
  (when lds-dir
      (progn
        (load-file (concat lds-dir "settings.el"))
        (recursive-load-dir-settings (file-truename(concat lds-dir "..")))))))

(defun load-dir-settings()
  (interactive)
  (when buffer-file-name
    (recursive-load-dir-settings buffer-file-name)))

(add-hook 'find-file-hook 'load-dir-settings)

Dadurch wird die Datei settings.elin das Verzeichnis der aktuellen Datei geladen. Anschließend settings.elwird im Verzeichnisbaum weiter nach oben gesucht , bis keine solchen Dateien mehr gefunden werden können (genau wie bei .dir-Locations.el).

Dadurch werden die Einstellungsdateien ohne Sicherheitsabfrage geladen und ausgeführt. Sie müssen also sicherstellen, dass Sie der einzige sind, der solche Dateien in die Verzeichnisstruktur aufnehmen kann. Wenn Sie die Eingabeaufforderung weiterhin wünschen, kann sie natürlich ohne Verwendung der Anpassungsmechanik hinzugefügt werden , damit Sie init.elsauber bleiben.

Ein Beispiel für settings.elkönnte so aussehen:

(make-local-variable 'my-pw)
(setq my-pw "passw0rd A")
(message "Loaded super-secret password for project A")
Geier
quelle
Das sieht nach einer Antwort aus, nach der ich gesucht habe. Danke, ich werde es versuchen.
d12frosted
3

Wenn Sie die Konfiguration init.elmanuell in Ihre Datei schreiben , können Sie Folgendes hinzufügen:

(setq custom-file "~/.emacs.d/custom.el")
(load custom-file t)

Wenn Emacs nun auf eine .dir-locals.elmit zweifelhaften Optionen stößt, speichert Emacs Ihre Auswahl in dieser custom.elDatei, sodass Sie Ihre init.elDatei öffentlich freigeben können .

Wenn Sie die Customize-Oberfläche von Emacs für Ihre gesamte Konfiguration verwenden möchten, funktioniert dies meiner Meinung nach nicht für Sie.

Schlüsselbartprobleme
quelle
Danke für deine Antwort. Diese Problemumgehung könnte gut für mich sein. Aber leider ist es keine allgemeine Lösung, deshalb lasse ich die Frage offen.
d12frosted
0

Die Lösung besteht darin, das Emacs-Dir-Local-Schutzsystem zu überschreiben.

(defun safe-local-variable-p (sym val)
"Put your guard logic here, return t when sym is ok, nil otherwise"
  t)

Legen Sie es einfach irgendwo in Ihren Elisp-Kern von Init und Monkey-Patch-Emacs.

dev1223
quelle