emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Bastien Guerry <bzg@altern.org>
To: emacs-orgmode@gnu.org
Subject: [Accepted] Problems with buffer-local variables
Date: Tue, 15 Feb 2011 18:04:46 +0100 (CET)	[thread overview]
Message-ID: <20110215170446.7B5591EB03@myhost.localdomain> (raw)
In-Reply-To: m1r5bsx2qb.fsf@94.196.190.115.threembb.co.uk

Patch 567 (http://patchwork.newartisans.com/patch/567/) is now "Accepted".

Maintainer comment: none

This relates to the following submission:

http://mid.gmane.org/%3Cm1r5bsx2qb.fsf%4094.196.190.115.threembb.co.uk%3E

Here is the original message containing the patch:

> Content-Type: text/plain; charset="utf-8"
> MIME-Version: 1.0
> Content-Transfer-Encoding: 7bit
> Subject: [Orgmode] Problems with buffer-local variables
> Date: Tue, 01 Feb 2011 01:00:44 -0000
> From: Dan Davison <dandavison7@gmail.com>
> X-Patchwork-Id: 567
> Message-Id: <m1r5bsx2qb.fsf@94.196.190.115.threembb.co.uk>
> To: Carsten Dominik <carsten.dominik@gmail.com>
> Cc: emacs-orgmode@gnu.org
> 
> Carsten Dominik <carsten.dominik@gmail.com> writes:
> 
> > On Dec 22, 2010, at 3:51 PM, Dan Davison wrote:
> >
> >> There's recently been some advocacy of using buffer-local variables
> >> for
> >> Org-mode configuration. It seems like a good idea to me. However, I
> >> think that it raises a problem: there are at least two situations in
> >> which Org internally spawns a buffer that is supposed to be a sort of
> >> "copy" of another Org buffer: these situations are export and org-src
> >> edit buffer. The problem is that the "copy" buffer doesn't inherit
> >> local
> >> variables from the parent buffer.
> >>
> >> It seems that either we should propagate all local variables in these
> >> cases (but I suspect that is inappropriate for some variables), or we
> >> have to have a rule for identifying the subset of local variables
> >> which
> >> need to be propagated.
> >>
> >> Below is one example which I think demonstrates a problem. If you
> >> evaluate the elisp block and then export to HTML, the noweb does not
> >> get
> >> expanded, because the configuration variable is buffer-local (behind
> >> the
> >> scenes, Org creates a buffer copy just before exporting a buffer).
> >>
> >> --8<---------------cut here---------------start------------->8---
> >> #+title: Local variables issues?
> >>
> >> Evaluate this block, then do C-c C-e h
> >> #+begin_src emacs-lisp :results silent :exports none
> >>  (set-default 'org-babel-default-header-args:sh
> >>          nil)
> >>  (set (make-local-variable 'org-babel-default-header-args:sh)
> >>       '((:noweb . "yes")))
> >> #+end_src
> >>
> >> #+begin_src sh :exports both
> >> <<foo>>
> >> #+end_src
> >>
> >> #+source: foo
> >> #+begin_src sh :exports none
> >> echo hello
> >> #+end_src
> >> --8<---------------cut here---------------end--------------->8---
> >>
> >> It's also a problem when spawning the org-src edit buffer. There is a
> >> patch in the pipeline that tries to identify all the necessary local
> >> variables and transmit them to the edit buffer:
> >>
> >> http://patchwork.newartisans.com/patch/438/
> >>
> >> That's a bit messy, but in the export case it seems even harder to
> >> identify all variables that might need to be transmitted.
> >>
> >> What is a good solution?
> >
> >
> > Hi Dan,
> >
> > I see only two possibilities.  Either use a list of variables that
> > should be transported, or copy all local variables, or all local
> > variables that match a pattern.  An example for doing something like
> > this can be found in org-get-local-variables which is, for example,
> > used by `org-run-like-in-org-mode'.
> 
> Here's a patch. It clones into the pre-export buffer all buffer-local
> variables that match a regexp (currently "^\\(org-\\|orgtbl-\\)"). We
> might want to watch out for unanticipated side effects.
> 
> This should mean that we can use buffer-local variables to set export
> related variables on a per-buffer basis[1].
> 
> On reflection I think that the src edit buffer case should be dealt with
> as it is currently (by ad-hoc transporting of variables in the org-src
> code). I still stand by my pending patch 438, which tidies up the
> local-variables stuff in org-edit-src-code.
> 
> http://patchwork.newartisans.com/patch/438/
> 
> Dan
> 
> Footnotes:
> [1] Also, we can use the 'local argument to add-hook to set the various
> export hooks.
> 
> 
>     Ensure that buffer-local variables have their effects during export.
>     
>     * lisp/org.el (org-clone-local-variables): New function to copy local
>     variables from another buffer.
>     * lisp/org-exp.el (org-export-preprocess-string): Clone local
>     variables from source org buffer into temporary export preprocessing
>     buffer.
> 
> #+begin_src diff
> #+end_src
> 
> >
> > - Carsten
> 
> 
> diff --git a/lisp/org-exp.el b/lisp/org-exp.el
> index 97f17e5..6b333a7 100644
> --- a/lisp/org-exp.el
> +++ b/lisp/org-exp.el
> @@ -1028,6 +1028,7 @@ on this string to produce the exported version."
>  	 (inhibit-read-only t)
>  	 (drawers org-drawers)
>  	 (outline-regexp "\\*+ ")
> +	 (source-buffer (current-buffer))
>  	 target-alist rtn)
>  
>      (setq org-export-target-aliases nil
> @@ -1051,6 +1052,7 @@ on this string to produce the exported version."
>  
>        (let ((org-inhibit-startup t)) (org-mode))
>        (setq case-fold-search t)
> +      (org-clone-local-variables source-buffer "^\\(org-\\|orgtbl-\\)")
>        (org-install-letbind)
>  
>        ;; Call the hook
> diff --git a/lisp/org.el b/lisp/org.el
> index 808c9ed..dda97d9 100644
> --- a/lisp/org.el
> +++ b/lisp/org.el
> @@ -8127,6 +8127,18 @@ Possible values in the list of contexts are `table', `headline', and `item'."
>  		 x nil))
>  	   varlist))))
>  
> +(defun org-clone-local-variables (from-buffer &optional regexp)
> +  "Clone local variables from FROM-BUFFER.
> +Optional argument REGEXP selects variables to clone."
> +  (mapc
> +   (lambda (pair)
> +     (and (symbolp (car pair))
> +	  (or (null regexp)
> +	      (string-match regexp (symbol-name (car pair))))
> +	  (set (make-local-variable (car pair))
> +	       (cdr pair))))
> +   (buffer-local-variables from-buffer)))
> +
>  ;;;###autoload
>  (defun org-run-like-in-org-mode (cmd)
>    "Run a command, pretending that the current buffer is in Org-mode.
> 

  reply	other threads:[~2011-02-16 16:18 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-22 14:51 Problems with buffer-local variables Dan Davison
2011-01-14 12:22 ` Carsten Dominik
2011-01-31 20:00   ` Dan Davison
2011-02-15 17:04     ` Bastien Guerry [this message]
2011-02-15 17:05     ` Bastien

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110215170446.7B5591EB03@myhost.localdomain \
    --to=bzg@altern.org \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).