aboutsummaryrefslogtreecommitdiff
path: root/Doom/.doom.d/org/literate.org
diff options
context:
space:
mode:
authordx <aryadevchavali1@gmail.com>2020-07-15 15:56:08 +0100
committerdx <aryadevchavali1@gmail.com>2020-07-15 15:57:09 +0100
commit6bdf6db3b453cff3a3f46f1b8f33cac6426f98ac (patch)
treeb13c110ee1e64abfc19126085b08bace6a42d14c /Doom/.doom.d/org/literate.org
parent33edf2cf6d1a2d653ca268ad272eb8f4f30380ef (diff)
downloaddotfiles-6bdf6db3b453cff3a3f46f1b8f33cac6426f98ac.tar.gz
dotfiles-6bdf6db3b453cff3a3f46f1b8f33cac6426f98ac.tar.bz2
dotfiles-6bdf6db3b453cff3a3f46f1b8f33cac6426f98ac.zip
~~/.doom.d -> ~/.config/doom
Diffstat (limited to 'Doom/.doom.d/org/literate.org')
-rw-r--r--Doom/.doom.d/org/literate.org105
1 files changed, 0 insertions, 105 deletions
diff --git a/Doom/.doom.d/org/literate.org b/Doom/.doom.d/org/literate.org
deleted file mode 100644
index 53bd6a2..0000000
--- a/Doom/.doom.d/org/literate.org
+++ /dev/null
@@ -1,105 +0,0 @@
-#+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.
-
-/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
-(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.
-#+BEGIN_SRC elisp
-(defun dx:literate/remove-mult (remove-files files)
- "Remove any occurrences of `remove-files' from `files'"
- (let ((parsed-remove-files (map 'list
- #'(lambda (i) (expand-file-name (concat doom-private-dir i)))
- remove-files))) ; Generate a list of all fully expanded files to remove
- (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.
-#+BEGIN_SRC elisp
-(defun dx:literate/destination(SRC)
- "Parse a src.org file to a bin/src.el file"
- (replace-regexp-in-string ".*/\\(\\w+\\).org"
- (expand-file-name (concat dx:literate/bin-dir "\\1.el")) SRC))
-#+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.
-#+BEGIN_SRC elisp
-(defun dx:literate/tangle (SRC DEST)
- "Tangle a source org file into a destination el file using a new emacs instance"
- (let ((default-directory doom-private-dir))
- (when (file-newer-than-file-p SRC DEST)
- (let ((output (get-buffer-create "*org-tangle*")))
- (unwind-protect
- (async-shell-command
- (concat "emacs "
- "-q " "--batch "
- "-l " "ob-tangle "
- "--eval "
- (format "'(org-babel-tangle-file %S %S)'" SRC DEST))
- "*org-tangle-messages*"
- "*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).
-#+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.
-#+BEGIN_SRC elisp
-(defun dx:literate/compile-hook ()
- "Any org file within $DOOM/org will be compiled on save"
- (when (and (eq major-mode 'org-mode)
- (or (file-in-directory-p buffer-file-name doom-private-dir)
- (file-in-directory-p buffer-file-name (concat doom-private-dir "org")))
- (not (string= buffer-file-name (expand-file-name (concat doom-private-dir "README.org")))))
- (dx:literate/tangle buffer-file-name (dx:literate/destination buffer-file-name))))
-
-(after! org
- (add-hook 'after-save-hook #'dx:literate/compile-hook))
-#+END_SRC
-* Procedure for all files
-A procedure that parses all the org files in a given directory into Emacs lisp
-files, using the parser function made. Assume all org files in the "location"
-directory contribute to the config.
-The location is not set because this function could be easily programmed to use
-multiple /differing/ sources to produce the config. The tangle function is set
-because this is the function we'll be using for tangling all org files to ELisp files.
-#+BEGIN_SRC elisp
-(defun dx:literate/tangle-all (&optional location)
- "Tangle all org files in `location' to el files in the `destination'"
- (interactive)
- (or location (setq location doom-private-dir))
- (message "Starting compilation process")
- (let ((files (directory-files-recursively location ".org")))
- (dolist (file files)
- (message "Compiling and parsing %s" file)
- (dx:literate/tangle file (dx:literate/destination file)))))
-#+END_SRC
-* Load configuration
-Final step of the literate cycle: load the config for the first time. Load any org files in =dx:literate/load-files=.
-#+BEGIN_SRC elisp
-(dolist (file dx:literate/load-files)
- (load (dx:literate/destination file)))
-#+END_SRC