Emacs Lock (
‘emacs-lock-mode’) is a minor mode for marking buffers as protected. Several levels of protection are provided:
The default locking behavior can be customized via
Emacs Lock is included in Emacs 24.
To protect the scratch buffer against accidental kill you can use the following code in .emacs or in init.el :
(with-current-buffer "*scratch*" (emacs-lock-mode 'kill))
And to unprotect :
(with-current-buffer "*scratch*" (emacs-lock-mode -1))
To protect important buffers from accidental killing, use the following forms in XEmacs:
(setq permanent-buffers-alist '(("*scratch*" (lisp-interaction-mode)))) (permanent-buffers-mode t)
(require 'protbuf) (protect-buffer-from-kill-mode nil (get-buffer "*scratch*"))
In case you need a function to kill a buffer protected by protbuf.el, here is one:
(defun kill-protected-buffer (&optional buffer-or-name) "Kill a buffer, overriding the protection granted by protbuf.el" (interactive (list (get-buffer (read-buffer "Kill buffer: " (current-buffer) 'existing)))) (message "Killing buffer %s, overriding protections." (buffer-name buffer-or-name)) (protect-buffer-from-kill-mode nil buffer-or-name) ;; Also disable by-name protection (let ((protect-buffer-names) (protect-buffer-matches) (protect-process-buffer-names) (protect-process-buffer-matches)) (kill-buffer buffer-or-name)))
This function also works with protbuf-by-name.el.
* Simpler and more robust than above. * Protect buffers by regexp. * Protected buffers can be buried when killed or have their contents erased prior to burial. Erasure can be undone.
It’s like 10 lines of real code.