emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] Local variables in an org file


From: Thomas S . Dye
Subject: Re: [O] Local variables in an org file
Date: Fri, 21 Aug 2015 07:08:02 -1000

Aloha Jarmo,

Jarmo Hurri <address@hidden> writes:

> Thomas S. Dye <address@hidden> writes:
>
>> * Define a local variable
>> #+name: my-var
>> #+header: :exports none
>> #+begin_src R
>> 768
>> #+end_src
>> #+name: pass-my-var-to-code-block
>> #+header: :var x=my-var
>> #+header: :exports both
>> #+begin_src emacs-lisp
>> (+ x 1)
>> #+end_src
>>
>> #+results: pass-my-var-to-code-block
>> : 769
>>
>> The variable is call_my-var().
>
> Yeah, this will work, but it's a huge amount of work.
>
> It would be brilliant if one could easily refer to a property inside a
> subtree. In both text and code.



#+SELECT_TAGS: export
#+EXCLUDE_TAGS: noexport

* Define a my-var property
  :PROPERTIES:
  :my-var:   768
  :END:

#+name: pass-property-to-code-block
#+header: :var my-var=(string-to-number (jk-org-kwd "my-var"))
#+header: :exports both
#+begin_src emacs-lisp
(+  my-var 1)
#+end_src

#+results: pass-property-to-code-block
: 769


The variable =my-var= is call_jk-org-kwd("my-var").


* Access keyword values                                            :noexport:

This is taken from 
[[http://jkitchin.github.io/blog/2013/05/05/Getting-keyword-options-in-org-files/][John
 Kitchin's blog]].  It has been modified so
=org-element-map= returns node properties in addition to keywords. 

#+name: jk-keywords
#+header: :results silent
#+begin_src emacs-lisp
(defun jk-org-kwds ()
  "parse the buffer and return a cons list of (property . value)
from lines like: #+PROPERTY: value"
  (org-element-map (org-element-parse-buffer 'element) '(keyword node-property)
                   (lambda (keyword) (cons (org-element-property :key keyword)
                                           (org-element-property :value 
keyword)))))
#+end_src

#+name: jk-org-kwd
#+header: :noweb yes
#+header: :var KEYWORD=""
#+begin_src emacs-lisp
<<jk-keywords>>
(cdr (assoc KEYWORD (jk-org-kwds)))
#+end_src

This might be a huge amount of work, too, but it keeps the variable in a
property instead of a source code block.

I keep John Kitchin's code in the library of Babel so that part doesn't
need to be reproduced each time.

Here is the ascii output:

1 Define a my-var property
==========================

  ,----
  | (+  my-var 1)
  `----

  ,----
  | 769
  `----


  The variable `my-var' is `768'.

hth,
Tom
-- 
Thomas S. Dye
http://www.tsdye.com



reply via email to

[Prev in Thread] Current Thread [Next in Thread]