summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhillip Lord <phillip.lord@russet.org.uk>2016-06-06 09:35:17 +0100
committerPhillip Lord <phillip.lord@russet.org.uk>2016-06-08 22:45:00 +0100
commita813487f1adf4cf59d7a471d62d22f706f9eab1d (patch)
tree873e54935a7e221778155e2abe2e8e2097b2d01b
parent1f85b7ca034ee4f96d796d95ec86bc4fa0ba8aa3 (diff)
downloademacs-a813487f1adf4cf59d7a471d62d22f706f9eab1d.tar.gz
Fix undo boundary in recursive edit (Bug#23632)
* src/keyboard.c (recursive_edit_1): specbind undo-auto--undoably-changed-buffers. * lisp/simple.el (undo-auto--undoably-changed-buffers): fix docstring.
-rw-r--r--lisp/simple.el4
-rw-r--r--src/keyboard.c10
-rw-r--r--test/automated/simple-test.el32
3 files changed, 43 insertions, 3 deletions
diff --git a/lisp/simple.el b/lisp/simple.el
index c5aa2922475..e38bf70f520 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -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."
diff --git a/src/keyboard.c b/src/keyboard.c
index e3858a5d8dc..2db9aaf0297 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -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");
diff --git a/test/automated/simple-test.el b/test/automated/simple-test.el
index 12ebc75ea92..40cd1d29498 100644
--- a/test/automated/simple-test.el
+++ b/test/automated/simple-test.el
@@ -310,6 +310,38 @@
(= 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