Using org-files like el-files
Posted June 24, 2014 at 09:32 PM | categories: org-mode, emacs | tags:
Updated June 24, 2014 at 09:34 PM
I wrote some emacs-lisp code in org-mode, and load them with org-babel-load-file. I thought it would be nice if there was load path for org-files, similar to the one for lisp files. Here I document what it might look like.
We need a load path to search for the org-file.
(setq org-load-path '("~/Dropbox/kitchingroup/jmax/"))
| ~/Dropbox/kitchingroup/jmax/ |
Next, we need the function to do the loading. We need to find the org-file, and then load it.
(defun org-require (orgfile)
"orgfile is a symbol to be loaded"
(let ((org-file (concat (symbol-name orgfile) ".org"))
(path))
;; find the org-file
(catch 'result
(loop for dir in org-load-path do
(when (file-exists-p
(setq path
(concat
(directory-file-name dir)
"/"
org-file)))
(throw 'result path))))
(org-babel-load-file path)))
(org-require 'org-ref)
Loaded ~/Dropbox/kitchingroup/jmax/org-ref.el
That looks pretty simple. You do need write access to the location where the org-file is though. Let us look at a version that copies the file to a temporary directory. For some reason, I am not able to use org-babel-load-file with this. But, it does look like I can tangle the file, and assuming (big assumption) that the file tangles to a regularly named .el file, this seems to work too.
(defun org-require (orgfile)
"orgfile is a symbol to be loaded"
(let ((org-file (concat (symbol-name orgfile) ".org"))
(el-file (concat (symbol-name orgfile) ".el"))
(path))
;; find the org-file
(catch 'result
(loop for dir in org-load-path do
(when (file-exists-p
(setq path
(concat
(directory-file-name dir)
"/"
org-file)))
(throw 'result path))))
(copy-file path temporary-file-directory t)
(org-babel-tangle-file (concat temporary-file-directory (file-name-nondirectory path)))
(load-file (concat temporary-file-directory el-file))
))
(org-require 'org-ref)
t
This actually seems pretty reasonable. I have not thought about complications but for simple cases, e.g. single org-file, it looks ok.
Copyright (C) 2014 by John Kitchin. See the License for information about copying.
Org-mode version = 8.2.6