changeset 41254:2538b11fc837

(delete-selection-pre-hook): Handle and resignal file-supersession errors to interact properly with userlock.el.
author Richard M. Stallman <rms@gnu.org>
date Mon, 19 Nov 2001 06:21:11 +0000
parents 87ae7a37e076
children 719d61cbaf9f
files lisp/delsel.el
diffstat 1 files changed, 25 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/delsel.el	Mon Nov 19 06:08:38 2001 +0000
+++ b/lisp/delsel.el	Mon Nov 19 06:21:11 2001 +0000
@@ -84,24 +84,31 @@
 	     (not buffer-read-only))
     (let ((type (and (symbolp this-command)
 		     (get this-command 'delete-selection))))
-      (cond ((eq type 'kill)
-	     (delete-active-region t))
-	    ((eq type 'yank)
-	     ;; Before a yank command,
-	     ;; make sure we don't yank the same region
-	     ;; that we are going to delete.
-	     ;; That would make yank a no-op.
-	     (when (string= (buffer-substring-no-properties (point) (mark))
-			    (car kill-ring))
-	       (current-kill 1))
-	     (delete-active-region))
-	    ((eq type 'supersede)
-	     (let ((empty-region (= (point) (mark))))
-	       (delete-active-region)
-	       (unless empty-region
-		 (setq this-command 'ignore))))
-	    (type
-	     (delete-active-region))))))
+      (condition-case data
+	  (cond ((eq type 'kill)
+		 (delete-active-region t))
+		((eq type 'yank)
+		 ;; Before a yank command,
+		 ;; make sure we don't yank the same region
+		 ;; that we are going to delete.
+		 ;; That would make yank a no-op.
+		 (when (string= (buffer-substring-no-properties (point) (mark))
+				(car kill-ring))
+		   (current-kill 1))
+		 (delete-active-region))
+		((eq type 'supersede)
+		 (let ((empty-region (= (point) (mark))))
+		   (delete-active-region)
+		   (unless empty-region
+		     (setq this-command 'ignore))))
+		(type
+		 (delete-active-region)))
+	(file-supersession
+	 ;; If ask-user-about-supersession-threat signals an error,
+	 ;; stop safe_run_hooks from clearing out pre-command-hook.
+	 (and (eq inhibit-quit 'pre-command-hook)
+	      (setq inhibit-quit 'delete-selection-dummy))
+	 (signal 'file-supersession (cdr data)))))))
 
 (put 'self-insert-command 'delete-selection t)
 (put 'self-insert-iso 'delete-selection t)