summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Ecay <aaronecay@gmail.com>2013-08-28 11:50:53 -0400
committerAaron Ecay <aaronecay@gmail.com>2013-10-28 15:09:25 -0400
commit8b264d505ee74b3b215fdc1baf4daf2167e9e2e4 (patch)
tree4726b2ec16929a34ecf6c5e35ba8c00cdfc26caa
parentdca85fec629e9148cd4c7ea368321edd5637da58 (diff)
downloadorg-mode-8b264d505ee74b3b215fdc1baf4daf2167e9e2e4.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 6ec3adc..f490be7 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))