]> git.eshelyaron.com Git - emacs.git/commitdiff
(iso-accents-compose): Fix crash during redisplay.
authorKim F. Storm <storm@cua.dk>
Thu, 24 Feb 2005 13:56:29 +0000 (13:56 +0000)
committerKim F. Storm <storm@cua.dk>
Thu, 24 Feb 2005 13:56:29 +0000 (13:56 +0000)
Call force-window-update after read-event and delete-region
to signal that window is not accurate.

lisp/international/iso-acc.el

index 971d1d128e67a073e6c6e05799de93ceb940260b..6c94f4aa562e8bcdb1fde8ecc373f3a87c5cc5e7 100644 (file)
@@ -290,6 +290,16 @@ the language you choose)."
       (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 @@ the language you choose)."
                            (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