summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Ecay <aaronecay@gmail.com>2013-08-28 11:50:53 -0400
committerBastien Guerry <bzg@altern.org>2014-03-22 09:40:18 +0100
commitcb53665e553b6d8b644b2e166d97be2bab753a98 (patch)
tree168fa3a3d15ef13b710bde57e1b7168b1f4b9cbf
parentb399ff0cba2382bf52d5bb6ef2b4a776fe0ac902 (diff)
downloadorg-mode-cb53665e553b6d8b644b2e166d97be2bab753a98.tar.gz
Fix org-src-edit interaction with undo.
* org-src.el (org-edit-src-exit): Place an undo boundary before writing changes back to parent buffer. The previous code attempted to preserve the undo information in the indirect buffer editing the source code, but this interacts poorly with the undo system, and can lead to undo operations scrambling the buffer. The new approach means that edits made in the indirect buffer cannot be undone piece-by-piece (instead, all changes made in the indirect buffer constitute one “change” from the point of view of undo), but the misbehavior of undo is (hopefully) now avoided.
-rw-r--r--lisp/org-src.el14
1 files changed, 7 insertions, 7 deletions
diff --git a/lisp/org-src.el b/lisp/org-src.el
index f2091ef..f870b2c 100644
--- a/lisp/org-src.el
+++ b/lisp/org-src.el
@@ -753,14 +753,14 @@ with \",*\", \",#+\", \",,*\" and \",,#+\"."
(kill-buffer buffer))
(goto-char beg)
(when allow-write-back-p
- (let ((buffer-undo-list t))
- (delete-region beg (max beg end))
- (unless (string-match "\\`[ \t]*\\'" code)
- (insert code))
- ;; Make sure the overlay stays in place
+ (undo-boundary)
+ (delete-region beg (max beg end))
+ (unless (string-match "\\`[ \t]*\\'" code)
+ (insert code))
+ ;; Make sure the overlay stays in place
(when (eq context 'save) (move-overlay ovl beg (point)))
- (goto-char beg)
- (if single (just-one-space))))
+ (goto-char beg)
+ (if single (just-one-space)))
(if (memq t (mapcar (lambda (overlay)
(eq (overlay-get overlay 'invisible)
'org-hide-block))