changeset 14507:ec4424facc98

(text-read-only): New error symbol. (kill-region): Use it when text has read-only text property. (yank-pop): Turn on inhibit-read-only.
author Richard M. Stallman <rms@gnu.org>
date Tue, 06 Feb 1996 23:56:47 +0000
parents bddd8114eaa9
children 87b0d4b7577a
files lisp/simple.el
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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))