## Using org-files like el-files

| categories: | tags: | View Comments

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-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)))
))

(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.