]> code.delx.au - gnu-emacs/commitdiff
Fix undo boundary in recursive edit (Bug#23632)
authorPhillip Lord <phillip.lord@russet.org.uk>
Mon, 6 Jun 2016 08:35:17 +0000 (09:35 +0100)
committerPhillip Lord <phillip.lord@russet.org.uk>
Wed, 8 Jun 2016 21:45:00 +0000 (22:45 +0100)
 * src/keyboard.c (recursive_edit_1): specbind
   undo-auto--undoably-changed-buffers.
 * lisp/simple.el (undo-auto--undoably-changed-buffers):
   fix docstring.

lisp/simple.el
src/keyboard.c
test/automated/simple-test.el

index c5aa2922475b7f5e4f087f53a9804bbc69ac2f63..e38bf70f520cd3262d559ff2ded0adff0bec148c 100644 (file)
@@ -2910,9 +2910,7 @@ REASON describes the reason that the boundary is being added; see
 
 This list is maintained by `undo-auto--undoable-change' and
 `undo-auto--boundaries' and can be affected by changes to their
-default values.
-
-See also `undo-auto--buffer-undoably-changed'.")
+default values.")
 
 (defun undo-auto--add-boundary ()
   "Add an `undo-boundary' in appropriate buffers."
index e3858a5d8dc0c6ae663c5959c98d76f2264a3063..2db9aaf0297e894ce88772e51960144de8259e49 100644 (file)
@@ -681,6 +681,14 @@ recursive_edit_1 (void)
   specbind (Qinhibit_redisplay, Qnil);
   redisplaying_p = 0;
 
+  /* This variable stores buffers that have changed so that an undo
+     boundary can be added. specbind this so that changes in the
+     recursive edit will not result in undo boundaries in buffers
+     changed before we entered there recursive edit.
+     See Bug #23632.
+  */
+  specbind (Qundo_auto__undoably_changed_buffers, Qnil);
+
   val = command_loop ();
   if (EQ (val, Qt))
     Fsignal (Qquit, Qnil);
@@ -10956,6 +10964,8 @@ syms_of_keyboard (void)
   DEFSYM (Qpost_command_hook, "post-command-hook");
 
   DEFSYM (Qundo_auto__add_boundary, "undo-auto--add-boundary");
+  DEFSYM (Qundo_auto__undoably_changed_buffers,
+          "undo-auto--undoably-changed-buffers");
 
   DEFSYM (Qdeferred_action_function, "deferred-action-function");
   DEFSYM (Qdelayed_warnings_hook, "delayed-warnings-hook");
index 12ebc75ea9284a824274eb13010a8e103363d613..40cd1d29498f95d4fcbacd4ded021bb18c48dfb1 100644 (file)
    (= 6
       (undo-test-point-after-forward-kill))))
 
+(defmacro simple-test-undo-with-switched-buffer (buffer &rest body)
+  (let ((before-buffer (make-symbol "before-buffer")))
+    `(let ((,before-buffer (current-buffer)))
+       (unwind-protect
+           (progn
+             (switch-to-buffer ,buffer)
+             ,@body)
+         (switch-to-buffer ,before-buffer)))))
+
+;; This tests for a regression in emacs 25.0 see bug #23632
+(ert-deftest simple-test-undo-extra-boundary-in-tex ()
+  (should
+   (string=
+    ""
+    (simple-test-undo-with-switched-buffer
+        "temp.tex"
+      (latex-mode)
+      ;; This macro calls `latex-insert-block'
+      (execute-kbd-macro
+       (read-kbd-macro
+        "
+C-c C-o                        ;; latex-insert-block
+RET                    ;; newline
+C-/                     ;; undo
+"
+        ))
+      (buffer-substring-no-properties
+       (point-min)
+       (point-max))))))
+
+
+
 
 (provide 'simple-test)
 ;;; simple-test.el ends here