diff options
author | Richard M. Stallman <rms@gnu.org> | 2001-11-19 06:21:11 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 2001-11-19 06:21:11 +0000 |
commit | f13e84fa4b4c387a05aef02648e6754093e13e61 (patch) | |
tree | 3f880b734fb35148769bffc6537e09ff0054ca40 /lisp/delsel.el | |
parent | a764440a8fd55d1718942076cdf529053dd08bc6 (diff) |
(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.el | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/lisp/delsel.el b/lisp/delsel.el index 4301e69b61..9488e94061 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) |