From 9260e6d4c5537994ffb6df2f2cc48c62ad4ffb63 Mon Sep 17 00:00:00 2001 From: Matt Lundin Date: Tue, 29 Jul 2014 13:35:41 -0500 Subject: [PATCH] Protect open buffers when publishing sitemap * lisp/ox-publish.el: (org-publish-find-title) (org-publish-find-date) Make sure to call org-export-get-environment in copy of buffer if emacs is already visiting. Otherwise, #+bind variables meant for export can be set in live buffers. This patch also optimizes the above functions by inhibiting org-startup on buffers emacs visits temporarily. --- lisp/ox-publish.el | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lisp/ox-publish.el b/lisp/ox-publish.el index 94f12e9..df40572 100644 --- a/lisp/ox-publish.el +++ b/lisp/ox-publish.el @@ -806,11 +806,18 @@ Default for SITEMAP-FILENAME is 'sitemap.org'." "Find the title of FILE in project." (or (and (not reset) (org-publish-cache-get-file-property file :title nil t)) - (let* ((visiting (find-buffer-visiting file)) + (let* ((org-inhibit-startup t) + (visiting (find-buffer-visiting file)) (buffer (or visiting (find-file-noselect file)))) (with-current-buffer buffer (let ((title - (let ((property (plist-get (org-export-get-environment) :title))) + (let ((property + (plist-get + ;; protect local variables in open buffers + (if visiting + (org-export-with-buffer-copy (org-export-get-environment)) + (org-export-get-environment)) + :title))) (if property (org-no-properties (org-element-interpret-data property)) (file-name-nondirectory (file-name-sans-extension file)))))) @@ -825,11 +832,14 @@ If FILE is an Org file and provides a DATE keyword use it. In any other case use the file system's modification time. Return time in `current-time' format." (if (file-directory-p file) (nth 5 (file-attributes file)) - (let* ((visiting (find-buffer-visiting file)) + (let* ((org-inhibit-startup t) + (visiting (find-buffer-visiting file)) (file-buf (or visiting (find-file-noselect file nil))) (date (plist-get (with-current-buffer file-buf - (org-export-get-environment)) + (if visiting + (org-export-with-buffer-copy (org-export-get-environment)) + (org-export-get-environment))) :date))) (unless visiting (kill-buffer file-buf)) ;; DATE is either a timestamp object or a secondary string. If it -- 2.0.3