# HG changeset patch # User Richard M. Stallman # Date 823651007 0 # Node ID ec4424facc98572499526f94644fb2c6efd1edda # Parent bddd8114eaa9f5f49d979b51add617e7f24783e2 (text-read-only): New error symbol. (kill-region): Use it when text has read-only text property. (yank-pop): Turn on inhibit-read-only. diff -r bddd8114eaa9 -r ec4424facc98 lisp/simple.el --- a/lisp/simple.el Tue Feb 06 23:48:06 1996 +0000 +++ b/lisp/simple.el Tue Feb 06 23:56:47 1996 +0000 @@ -1182,6 +1182,10 @@ (defvar kill-read-only-ok nil "*Non-nil means don't signal an error for killing read-only text.") +(put 'text-read-only 'error-conditions + '(text-read-only buffer-read-only error)) +(put 'text-read-only 'error-message "Text is read-only") + (defun kill-region (beg end) "Kill between point and mark. The text is deleted but saved in the kill ring. @@ -1211,7 +1215,10 @@ (if kill-read-only-ok (message "Read only text copied to kill ring") (setq this-command 'kill-region) - (barf-if-buffer-read-only))) + ;; Signal an error if the buffer is read-only. + (barf-if-buffer-read-only) + ;; If the buffer isn't read-only, the text is. + (signal 'text-read-only (list (current-buffer))))) ;; In certain cases, we can arrange for the undo list and the kill ;; ring to share the same string object. This code does that. @@ -1313,7 +1320,8 @@ (if (not (eq last-command 'yank)) (error "Previous command was not a yank")) (setq this-command 'yank) - (let ((before (< (point) (mark t)))) + (let ((inhibit-read-only t) + (before (< (point) (mark t)))) (delete-region (point) (mark t)) (set-marker (mark-marker) (point) (current-buffer)) (insert (current-kill arg))