Mercurial > emacs
changeset 87933:1c868d4c8354
(delete-selection-pre-hook): Avoid clearing out
pre-command-hook when text is read-only.
author | Martin Rudalics <rudalics@gmx.at> |
---|---|
date | Thu, 24 Jan 2008 09:46:08 +0000 |
parents | f3fd12e0dddd |
children | a0db223cb682 |
files | lisp/delsel.el |
diffstat | 1 files changed, 17 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/delsel.el Thu Jan 24 08:54:00 2008 +0000 +++ b/lisp/delsel.el Thu Jan 24 09:46:08 2008 +0000 @@ -113,7 +113,23 @@ ;; 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))))))) + (signal 'file-supersession (cdr data))) + (text-read-only + ;; This signal may come either from `delete-active-region' or + ;; `self-insert-command' (when `overwrite-mode' is non-nil). + ;; To avoid clearing out `pre-command-hook' we handle this case + ;; by issuing a simple message. Note, however, that we do not + ;; handle all related problems: When read-only text ends before + ;; the end of the region, the latter is not deleted but any + ;; subsequent insertion will succeed. We could avoid this case + ;; by doing a (setq this-command 'ignore) here. This would, + ;; however, still not handle the case where read-only text ends + ;; precisely where the region starts: In that case the deletion + ;; would succeed but the subsequent insertion would fail with a + ;; text-read-only error. To handle that case we would have to + ;; investigate text properties at both ends of the region and + ;; skip the deletion when inserting text is forbidden there. + (message "Text is read-only") (ding)))))) (put 'self-insert-command 'delete-selection t) (put 'self-insert-iso 'delete-selection t)