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.
This commit is contained in:
parent
1f85b7ca03
commit
a813487f1a
3 changed files with 43 additions and 3 deletions
|
@ -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
|
This list is maintained by `undo-auto--undoable-change' and
|
||||||
`undo-auto--boundaries' and can be affected by changes to their
|
`undo-auto--boundaries' and can be affected by changes to their
|
||||||
default values.
|
default values.")
|
||||||
|
|
||||||
See also `undo-auto--buffer-undoably-changed'.")
|
|
||||||
|
|
||||||
(defun undo-auto--add-boundary ()
|
(defun undo-auto--add-boundary ()
|
||||||
"Add an `undo-boundary' in appropriate buffers."
|
"Add an `undo-boundary' in appropriate buffers."
|
||||||
|
|
|
@ -681,6 +681,14 @@ recursive_edit_1 (void)
|
||||||
specbind (Qinhibit_redisplay, Qnil);
|
specbind (Qinhibit_redisplay, Qnil);
|
||||||
redisplaying_p = 0;
|
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 ();
|
val = command_loop ();
|
||||||
if (EQ (val, Qt))
|
if (EQ (val, Qt))
|
||||||
Fsignal (Qquit, Qnil);
|
Fsignal (Qquit, Qnil);
|
||||||
|
@ -10956,6 +10964,8 @@ syms_of_keyboard (void)
|
||||||
DEFSYM (Qpost_command_hook, "post-command-hook");
|
DEFSYM (Qpost_command_hook, "post-command-hook");
|
||||||
|
|
||||||
DEFSYM (Qundo_auto__add_boundary, "undo-auto--add-boundary");
|
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 (Qdeferred_action_function, "deferred-action-function");
|
||||||
DEFSYM (Qdelayed_warnings_hook, "delayed-warnings-hook");
|
DEFSYM (Qdelayed_warnings_hook, "delayed-warnings-hook");
|
||||||
|
|
|
@ -310,6 +310,38 @@
|
||||||
(= 6
|
(= 6
|
||||||
(undo-test-point-after-forward-kill))))
|
(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)
|
(provide 'simple-test)
|
||||||
;;; simple-test.el ends here
|
;;; simple-test.el ends here
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue