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.el
mit 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-mode
auf 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-mode
nicht 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-enter
anstelle von view-mode
, da erstere ein EXIT-ACTION
Argument 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-ACTION
letztendlich an die view-mode-exit
Funktion ü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.el
Datei), 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-mode
und ich mache es nur,C-x C-q
wenn 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)