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