]> code.delx.au - gnu-emacs/commitdiff
Fix a bug in recording a macro while flyspell-mode is active
authorEli Zaretskii <eliz@gnu.org>
Fri, 28 Aug 2015 13:25:25 +0000 (16:25 +0300)
committerEli Zaretskii <eliz@gnu.org>
Fri, 28 Aug 2015 13:25:25 +0000 (16:25 +0300)
* lisp/subr.el (sit-for): Don't call read-event when recording a
macro.  (Bug#21329)

lisp/subr.el

index 53dea3e2997c949a02f6d9616e9a3e628b6621a9..61b87065c8a1f23cc64157b3ce567fd1da3bd460 100644 (file)
@@ -2277,7 +2277,18 @@ floating point support."
     t)
    ((input-pending-p t)
     nil)
-   ((<= seconds 0)
+   ((or (<= seconds 0)
+        ;; We are going to call read-event below, which will record
+        ;; the the next key as part of the macro, even if that key
+        ;; invokes kmacro-end-macro, so if we are recording a macro,
+        ;; the macro will recursively call itself.  In addition, when
+        ;; that key is removed from unread-command-events, it will be
+        ;; recorded the second time, so the macro will have each key
+        ;; doubled.  This used to happen if a macro was defined with
+        ;; Flyspell mode active (because Flyspell calls sit-for in its
+        ;; post-command-hook, see bug #21329.)  To avoid all that, we
+        ;; simply disable the wait when we are recording a macro.
+        defining-kbd-macro)
     (or nodisp (redisplay)))
    (t
     (or nodisp (redisplay))