Browse Source

Do not mark buffer as modified with org-preserve-local-variables

* lisp/org-macs.el (org-preserve-local-variables): Do not mark buffer
as modified or alter `buffer-undo-list' when body does not actually
modify the buffer.

This commit fixes a bug with `org-copy-subtree', which marked the
buffer as modified and added an entry to the undo list when the visited
file had local variables.
Ignacio Casso 2 years ago
parent
commit
aa789b89d7
1 changed files with 8 additions and 2 deletions
  1. 8 2
      lisp/org-macs.el

+ 8 - 2
lisp/org-macs.el

@@ -166,13 +166,19 @@
 	     (and (re-search-backward "^[ \t]*# +Local Variables:"
 	     (and (re-search-backward "^[ \t]*# +Local Variables:"
 				      (max (- (point) 3000) 1)
 				      (max (- (point) 3000) 1)
 				      t)
 				      t)
-		  (delete-and-extract-region (point) (point-max)))))))
+               (let ((buffer-undo-list t))
+	         (delete-and-extract-region (point) (point-max)))))))
+         (tick-counter-before (buffer-modified-tick)))
      (unwind-protect (progn ,@body)
      (unwind-protect (progn ,@body)
        (when local-variables
        (when local-variables
 	 (org-with-wide-buffer
 	 (org-with-wide-buffer
 	  (goto-char (point-max))
 	  (goto-char (point-max))
 	  (unless (bolp) (insert "\n"))
 	  (unless (bolp) (insert "\n"))
-	  (insert local-variables))))))
+          (let ((modified (< tick-counter-before (buffer-modified-tick)))
+                (buffer-undo-list t))
+	    (insert local-variables)
+            (unless modified
+              (restore-buffer-modified-p nil))))))))
 
 
 (defmacro org-no-popups (&rest body)
 (defmacro org-no-popups (&rest body)
   "Suppress popup windows and evaluate BODY."
   "Suppress popup windows and evaluate BODY."