Sie können verzeichnislokale Variablen verwenden , um die Quelldateien von Emacs standardmäßig schreibgeschützt zu machen. (Siehe auch C-hig (emacs) Directory Variables RET).
Erstellen Sie eine Datei .dir-locals.elmit dem folgenden Inhalt, die im Stammverzeichnis des zu schützenden Verzeichnisbaums aufgerufen wird :
((nil . ((eval . (view-mode 1)))))
Bearbeiten: Michał Politowski weist in den Kommentaren darauf hin, dass das Aktivieren view-modeauf diese Weise problematisch ist, denn wenn Sie den Puffer qdamit schließen, wird auch der Modus deaktiviert, was bedeutet, dass der Puffer beim nächsten Besuch view-modenicht aktiviert wird.
Bearbeiten 2: Constantine hat in den folgenden Kommentaren eine Lösung für dieses Problem bereitgestellt:
((nil . ((eval . (when buffer-file-name (view-mode-enter nil #'kill-buffer))))))
Dies fügt sinnvollerweise einen Test hinzu, um sicherzustellen, dass der Puffer bereits eine Datei besucht. Die Schlüsseländerung ist jedoch die Verwendung von view-mode-enteranstelle von view-mode, da erstere ein EXIT-ACTIONArgument verwendet, das bestimmt, was zu tun ist, wenn qeingegeben wird. In diesem Fall besteht die Exit-Aktion darin, den Puffer zu beenden und sicherzustellen, dass die Datei beim nächsten Besuch erneut in gespeichert wird view-mode.
Edit 3: Wenn wir diesem Pfad folgen , können wir auch sehen, dass das Angegebene EXIT-ACTIONletztendlich an die view-mode-exitFunktion übergeben wird, und seine Dokumentzeichenfolge gibt uns eine alternative Lösung:
view-no-disable-on-exit is a variable defined in `view.el'.
Its value is nil
Documentation:
If non-nil, View mode "exit" commands don't actually disable View mode.
Instead, these commands just switch buffers or windows.
This is set in certain buffers by specialized features such as help commands
that use View mode automatically.
Daher können wir Folgendes verwenden:
((nil . ((eval . (when buffer-file-name
(setq-local view-no-disable-on-exit t)
(view-mode-enter))))))
Ich verwende den alternativen Ansatz, den Sie vollständig in Ihrer Init-Datei angeben können (im Gegensatz zum Erstellen einer .dir-locals.elDatei), und mache die Dateien einfach schreibgeschützt, anstatt sie zu verwenden view-mode. Meine Konfiguration sieht folgendermaßen aus:
;; Emacs
(dir-locals-set-class-variables
'emacs
'((nil . ((buffer-read-only . t)
(show-trailing-whitespace . nil)
(tab-width . 8)
(eval . (whitespace-mode -1))))))
(dir-locals-set-directory-class "/usr/local/src/emacs" 'emacs)
(dir-locals-set-directory-class "/usr/local/share/emacs" 'emacs)
(dir-locals-set-directory-class "/usr/share/emacs" 'emacs)
Natürlich können Sie dasselbe für Ihr elpa-Verzeichnis und jedes andere Verzeichnis tun, das Quellcode von Drittanbietern enthält.
emacs-lisp-modeund ich mache es nur,C-x C-qwenn ich den Quellcode bearbeiten möchte.(defun set-buffer-read-only () (setq buffer-read-only t)) (add-hook 'emacs-lisp-mode-hook 'set-buffer-read-only)