summaryrefslogtreecommitdiff
path: root/lisp/delsel.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>2001-11-19 06:21:11 +0000
committerRichard M. Stallman <rms@gnu.org>2001-11-19 06:21:11 +0000
commitf13e84fa4b4c387a05aef02648e6754093e13e61 (patch)
tree3f880b734fb35148769bffc6537e09ff0054ca40 /lisp/delsel.el
parenta764440a8fd55d1718942076cdf529053dd08bc6 (diff)
downloademacs-f13e84fa4b4c387a05aef02648e6754093e13e61.tar.gz
(delete-selection-pre-hook): Handle and resignal
file-supersession errors to interact properly with userlock.el.
Diffstat (limited to 'lisp/delsel.el')
-rw-r--r--lisp/delsel.el43
1 files changed, 25 insertions, 18 deletions
diff --git a/lisp/delsel.el b/lisp/delsel.el
index 4301e69b61d..9488e94061e 100644
--- a/lisp/delsel.el
+++ b/lisp/delsel.el
@@ -84,24 +84,31 @@ any selection."
(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)