Commit a813487f authored by Phillip Lord's avatar Phillip Lord
Browse files

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.
parent 1f85b7ca
......@@ -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."
......
......@@ -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");
......
......@@ -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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment