Bastien <b...@gnu.org> writes: > Hi Matt, > > Matt Lundin <m...@imapmail.org> writes: > >> This patch fixes a bug in which org-publish makes the following call... >> (let ((org-inhibit-startup t) (org-mode))) > > Applied, thanks!
Oops... I see now that org-publish-find-date and org-publish-find-title call org-export-get-environment. This in turn relies on org-set-local to set #+BIND: variables, which requires the buffer to be writable. I have an org-mode-hook that sets some of my web publishing files read-only (so as to prevent accidental editing). Without org-inhibit-startup, these buffers remain read-only, causing the following error message: --8<---------------cut here---------------start------------->8--- org-export--get-global-options: Buffer is read-only: #<killed buffer> --8<---------------cut here---------------end--------------->8--- This could be solved by wrapping org-export-get-environment withing those functions with (let ((buffer-read-only nil)) ...). However, I think the fundamental problem is that org-export-get-environment should be called on a copy of the buffer. That, at least, is how it is used in org-export-as (see lines 3084 - 3107 of ox.el). When org-publish-find-title and org-publish-call-date calls it in a buffer that is already open, it does so on the original copy of the buffer. This has the effect of setting the #+BIND variables within the live buffer, which could (theoretically) be dangerous, since, AFAICT, they should only be set in a temporary copy of the buffer. So to be safe, we could do the following in org-publish-find-date and org-publish-find-title... (org-export-with-buffer-copy (org-export-get-environment)) What do you think? Best, Matt