Mercurial > emacs
changeset 60228:4779874c6d72
(iso-accents-compose): Fix crash during redisplay.
Call force-window-update after read-event and delete-region
to signal that window is not accurate.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Thu, 24 Feb 2005 13:56:29 +0000 |
parents | 431c8b8908a5 |
children | dd4499d17ce0 |
files | lisp/international/iso-acc.el |
diffstat | 1 files changed, 13 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/international/iso-acc.el Thu Feb 24 13:55:38 2005 +0000 +++ b/lisp/international/iso-acc.el Thu Feb 24 13:56:29 2005 +0000 @@ -290,6 +290,16 @@ (iso-accents-compose prompt) (vector last-input-char))) + +;; The iso-accents-compose function is called deep inside Emacs' read +;; key sequence machinery, so the call to read-event below actually +;; recurses into that machinery. Doing that does not cause any +;; problem on its own, but read-event will have marked the window's +;; display matrix to be accurate -- which is broken by the subsequent +;; call to delete-region. Therefore, we must call force-window-update +;; after delete-region to explicitly clear the accurate state of the +;; window's display matrix. + (defun iso-accents-compose (prompt) (let* ((first-char last-input-char) (list (assq first-char iso-accents-list)) @@ -308,7 +318,9 @@ (read-event)) (insert first-char) (prog1 (read-event) - (delete-region (1- (point)) (point))))) + (delete-region (1- (point)) (point)) + ;; Display is no longer up-to-date. + (force-window-update (selected-window))))) (entry (cdr (assq second-char list)))) (if entry ;; Found it: return the mapped char