From: Kim F. Storm Date: Thu, 24 Feb 2005 13:56:29 +0000 (+0000) Subject: (iso-accents-compose): Fix crash during redisplay. X-Git-Tag: ttn-vms-21-2-B4~2140 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1a94a5658ca9dac3340e39193d81d85242f556e6;p=emacs.git (iso-accents-compose): Fix crash during redisplay. Call force-window-update after read-event and delete-region to signal that window is not accurate. --- diff --git a/lisp/international/iso-acc.el b/lisp/international/iso-acc.el index 971d1d128e6..6c94f4aa562 100644 --- a/lisp/international/iso-acc.el +++ b/lisp/international/iso-acc.el @@ -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