summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1996-02-06 23:56:47 +0000
committerRichard M. Stallman <rms@gnu.org>1996-02-06 23:56:47 +0000
commit341da10513324ac54be58dd90ed3affd5ad92136 (patch)
tree702e6342059f0e8a096106151fafa649ca490583
parent1457a30d0cde0617a36307be30211fb1bcb03773 (diff)
downloademacs-341da10513324ac54be58dd90ed3affd5ad92136.tar.gz
(text-read-only): New error symbol.
(kill-region): Use it when text has read-only text property. (yank-pop): Turn on inhibit-read-only.
-rw-r--r--lisp/simple.el12
1 files changed, 10 insertions, 2 deletions
diff --git a/lisp/simple.el b/lisp/simple.el
index 5737469c873..6d8686bfbb6 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -1182,6 +1182,10 @@ yanking point; just return the Nth kill forward."
(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 @@ to make one entry in the kill ring."
(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 @@ comes the newest one."
(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))