Hi Julien, I just pushed up a small commit which will allow you to pull property values from a headline by embedding a small amount of elisp into your :var header argument. In this way the `org-entry-get' function can be used with our existing tangle-then-load elisp machinery.
Best -- Eric ,----[from the commit message] | babel: variable references which look like lisp forms are now evaluated | | for example, the following simple example | #+begin_src emacs-lisp :var two=(+ 1 1) | (sqrt two) | #+end_src | | #+results: | : 1.4142135623730951 | | Or this more interesting usage, which pulls variable values from | headline properties | *** example headline w/property | :PROPERTIES: | :special: 89 | :last-name: schulte | :END: | | #+begin_src emacs-lisp :var special=(string-to-number (org-entry-get nil "special" t)) | (+ special 1) | #+end_src | | #+results: | : 90 | | #+begin_src emacs-lisp :var last-name=(org-entry-get nil "last-name" t)) | (message "hello %s" last-name) | #+end_src | | #+results: | : hello schulte `---- Julien Fantin <julien.fan...@gmail.com> writes: > I've been using this init file to load my org-mode-contained emacs > configuration : > > ;;; init.el --- Where all the magic begins > ;; > ;; This file loads both > ;; - Org-mode : http://orgmode.org/ and > ;; - Org-babel: > http://orgmode.org/worg/org-contrib/babel/org-babel.php#library-of-babel > ;; > ;; It then loads the rest of our Emacs initialization from Emacs lisp > ;; embedded in literate Org-mode files. > ;; Load up Org Mode and Org Babel for elisp embedded in Org Mode files > (setq dotfiles-dir (file-name-directory (or (buffer-file-name) > load-file-name))) > > (let* ((org-dir (expand-file-name > "lisp" (expand-file-name > "org-mode" (expand-file-name > "elisp" dotfiles-dir)))) > (org-contrib-dir (expand-file-name > "lisp" (expand-file-name > "contrib" (expand-file-name > ".." org-dir)))) > (load-path (append (list org-dir org-contrib-dir) > (or load-path nil)))) > ;; load up Org-mode and Org-babel > (require 'org-install) > (require 'org-babel-init) > (require 'org-babel-emacs-lisp)) > ;; load up all literate org-mode files in this directory > (mapc 'org-babel-load-file (directory-files dotfiles-dir t "\\.org$")) > ;;; init.el ends here > > It's been working nicely until I tried to clean things up by setting some > commonly used variables in properties drawers, and access them from > emacs-lisp src blocks. > > The following illustrates my intent, and will behave as expected with > org-babel-execute-buffer, but fails when it is loaded by org-babel-load-file : > > * Configuration > :PROPERTIES: > :ELISP-DIR:~/emacs.d/elisp/ > :END: > > ** Load Path > #+begin_src emacs-lisp > (add-to-list 'load-path (org-entry-get nil "ELISP-DIR" t)) > #+end_src > > From my understanding, orb-babel-load-file tangles then loads the file, > losing the variables in the process. > > I've been using this function to get the expected behaviour, but the default > somewhat breaks expectations, don't you think ? > (defun > ba/org-babel-load-file (file) (with-temp-buffer (insert-file-contents > file) (org-mode) (org-babel-execute-buffer))) > > Or, is there a cleaner way to achieve this ? > > Regards, > julien > > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode