[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] Variable settings in .emacs VS cross device portability.
From: |
Nick Dokos |
Subject: |
Re: [O] Variable settings in .emacs VS cross device portability. |
Date: |
Wed, 01 Feb 2012 15:37:44 -0500 |
Eric S Fraga <address@hidden> wrote:
> Hello all,
>
> herewith is a minimal example that illustrates the problem I have with
> exporting and file local variables. The attached file re-defines
> org-export-latex-tag-markup to use a box instead of bold for tags. When
> I visit the file, Emacs does indeed set the variable to what I
> want. However, this setting is ignored on export.
>
> Actually, in this case, the BIND is also ignored on export even though
> the variable does change to the specified value after export!
>
> I am very confused, to say the least. *How* can I get file local
> behaviour when exporting with org? Am I doing something silly
> somewhere? (highly likely given my past track record ;-) Do others see
> different behaviour?
>
Good question (I mean the *How* question): I believe this is a bug and
it has to do with the problem that Dan Davison identified and (as it
turns out) partially fixed a year ago (see
http://thread.gmane.org/gmane.emacs.orgmode/35439/focus=36878 for those
details).
In a nutshell, the problem is that many export operations happen in
temporary buffers. These buffers do not automatically inherit local
variables, so the global setting is in force. Dan introduced a "clone
local variables" function and arranged for it to be called in
org-export-preprocess-string. However, the latter function operates on a
temp buffer, so when it returns (it returns the contents of the temp
buffer as as a string), the buffer is gone - and so are the local
variables.
The latex exporter then continues mucking around with the returned
string. The org-export-latex-markup variable is used in the function
org-export-latex-keywords-maybe. At the relevant moment, the call stack
looks like this:
,----
| org-export-latex-keywords-maybe()
| org-export-latex-fontify-headline(#(" Formatting tags :example:" 1 16 ...))
| org-export-latex-subcontent(...)
| org-export-latex-sub(...)
| org-export-latex-global(...)
| (let* (...) (set-buffer buffer) (erase-buffer) (org-install-letbind) ...
(org-export-latex-global (with-temp-buffer (insert string-for-export)) ...) ...)
| org-export-as-latex(nil nil nil "*Org LaTeX Export*")
| org-export-as-latex-to-buffer(nil)
| call-interactively(org-export-as-latex-to-buffer)
`----
Note that org-export-latex-global is called with a temp buffer and
neither it nor any of its successors clones local variables. So you end
up in org-export-latex-keywords-maybe with the global settings in force.
The quick-and-dirty hack would be to call Dan's cloning function in the
call to with-temp-buffer, but that's not enough:
org-export-latex-fontify-headline does the temp-buffer thingie as well
and needs the same treatment. That seems to make *this* case work but I'm
almost 100% sure that that won't be enough in the general case either:
there are probably other places where temp buffers are created to do
some processing like this. They will also be subject to this problem.
Nick
> I'm up to date (as of this morning) with org and latest emacs as of last
> week.
>
> Thanks,
> eric
>
>
>
> --
> : Eric S Fraga (GnuPG: 0xC89193D8FFFCF67D) in Emacs 24.0.92.1
> : using Org-mode version 7.8.03 (release_7.8.03.285.g646b3)
Re: [O] Variable settings in .emacs VS cross device portability., Eric S Fraga, 2012/02/01
Re: [O] Variable settings in .emacs VS cross device portability., janek, 2012/02/06