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