From 9f2c086dfdddc2eef37abf2fa17098bb1892c617 Mon Sep 17 00:00:00 2001 From: dx Date: Thu, 11 Jun 2020 00:57:33 +0100 Subject: ~literate config -> org-babel-load-* Basically, instead of generating files at every save on Emacs, just load them via org-babel-load-file. This means that I can rely on those functions to compile and manage org file to elisp file conversions. This happens at first run time, and will not compile org files to el files if there have been no changes to the org files. --- Doom/.doom.d/org/config.org | 9 +++++++-- Doom/.doom.d/org/literate.org | 45 ++++++++++++++++++++----------------------- 2 files changed, 28 insertions(+), 26 deletions(-) (limited to 'Doom/.doom.d/org') diff --git a/Doom/.doom.d/org/config.org b/Doom/.doom.d/org/config.org index 829dd4d..c23ec38 100644 --- a/Doom/.doom.d/org/config.org +++ b/Doom/.doom.d/org/config.org @@ -11,9 +11,14 @@ * Init Initialize literate config and setup some basic variables ** Bootstrap -Load the literate.el file to start parsing. +Declare variable for org files I want to compile #+BEGIN_SRC elisp -(load (expand-file-name (concat doom-private-dir "bin/literate.el"))) +(defvar dx:literate/org-files '("personal.org")) +#+END_SRC + +Then just iterate and load them via =org-babel-load-file=. +#+BEGIN_SRC elisp +(cl-loop for file in dx:literate/org-files do (org-babel-load-file (concat doom-private-dir "org/" file))) #+END_SRC ** Doom Variables - Set the doom localleader to "," because it's faster diff --git a/Doom/.doom.d/org/literate.org b/Doom/.doom.d/org/literate.org index d3c9d11..53bd6a2 100644 --- a/Doom/.doom.d/org/literate.org +++ b/Doom/.doom.d/org/literate.org @@ -1,24 +1,25 @@ -#+TITLE: Literate configuration +#+TITLE: Literate configuration (NO LONGER IN USE) * Preclude -My setup to produce a literate configuration. Allows me to write org files all -around the /doom-private-dir/ and access them. Also shaved like 0.2s off my -loading time. +My setup to produce a literate configuration. +Allows me to write org files all around the /doom-private-dir/ and access them. +Also shaved like 0.2s off my loading time. + +/Note/: My current literate system now uses the =org-babel-load*= functions to handle most of the hard work. +It's easier to use and manage, and I just don't use that many org files anymore so no need for such a big setup. * Constants Initialise some basic constants for where stuff is. - literate/bin-dir: Where to compile to - literate/preloaded-files: Relative to ~$DOOM~, which files are already preloaded/don't need to be compiled #+BEGIN_SRC elisp -(defvar dx:literate/bin-dir (expand-file-name (concat doom-private-dir "bin/")) "Directory to store elisp compiled files") -(defvar dx:literate/load-files '("~/.doom.d/org/personal.org") "Files to load after compilation") +(defconst dx:literate/bin-dir (expand-file-name (concat doom-private-dir "bin/")) "Directory to store elisp compiled files") +(defconst dx:literate/load-files '("~/.doom.d/org/personal.org") "Files to load after compilation") +(defconst dx:literate/directory (expand-file-name (concat doom-private-dir "org/")) "Directory to get org files from") #+END_SRC * Remove function -When loading the lisp, we need to load everything excluding "config.el" -(preloaded by doom) and "literate.el" (loaded by "config.el"). We'll make a very -specific remove function that will remove entries from a given list and return -the new list, given the fact that the files variable will be a list of fully -expanded file names. +When loading the lisp, we need to load everything excluding "config.el" (preloaded by doom) and "literate.el" (loaded by "config.el"). +We'll make a very specific remove function that will remove entries from a given list and return the new list, given the fact that the files variable will be a list of fully expanded file names. #+BEGIN_SRC elisp (defun dx:literate/remove-mult (remove-files files) "Remove any occurrences of `remove-files' from `files'" @@ -28,10 +29,8 @@ expanded file names. (remove-if #'(lambda (l) (member l parsed-remove-files)) files))) ; remove any files that are in the remove-files #+END_SRC * Destination for parser -Generate the destination for a literate config org file to parse to, in this -case the bin folder in the private directory -This is not fitted onto the parser because the parser could be fitted to -multiple /differing/ outputs easily if it isn't specified a destination. +Generate the destination for a literate config org file to parse to, in this case the bin folder in the private directory. +This is not fitted onto the parser because the parser could be fitted to multiple /differing/ outputs easily if it isn't specified a destination. #+BEGIN_SRC elisp (defun dx:literate/destination(SRC) "Parse a src.org file to a bin/src.el file" @@ -40,9 +39,8 @@ multiple /differing/ outputs easily if it isn't specified a destination. #+END_SRC * Parser ** Tangle function -First we need to get some sort of parser which can, given a source org file and -a destination, parse and produce an Emacs lisp file. We'll copy this from the -literate module of doom. +First we need to get some sort of parser which can, given a source org file and a destination, parse and produce an Emacs lisp file. +We'll copy this from the literate module of doom. #+BEGIN_SRC elisp (defun dx:literate/tangle (SRC DEST) "Tangle a source org file into a destination el file using a new emacs instance" @@ -60,16 +58,15 @@ literate module of doom. "*org-tangle-errors*")))))) #+END_SRC ** Popup rules -I don't want Emacs to focus onto the output buffer of the tangling process when I save, which is what happens with a standard async-shell-command. So setup a rule for the 'messages' and 'errors' buffers to not focus them (by setting their time to live to 0). +I don't want Emacs to focus onto the output buffer of the tangling process when I save, which is what happens with a standard async-shell-command. +So setup a rule for the 'messages' and 'errors' buffers to not focus them (by setting their time to live to 0). #+BEGIN_SRC elisp (set-popup-rule! "\*org-tangle-.*" :ttl 0 :quit t) #+END_SRC * Hook on save -Now we need to make a hook function that, when the current buffer is an org file -in the doom directory, will run the literate config procedure from above. Use -this hook function and add it to the after-save-hook once org mode has been -loaded. README.org has been added as an exception because it doesn't contain -literate contents. +Now we need to make a hook function that, when the current buffer is an org file in the doom directory, will run the literate config procedure from above. +Use this hook function and add it to the after-save-hook once org mode has been loaded. +README.org has been added as an exception because it doesn't contain literate contents. #+BEGIN_SRC elisp (defun dx:literate/compile-hook () "Any org file within $DOOM/org will be compiled on save" -- cgit v1.2.3-13-gbd6f