I wanted to be able to keep an org document as I learned [[Guile Scheme]] in [[emacs]]. I use [doom emacs](https://github.com/doomemacs/doomemacs), and while setup looked super simple, it sadly wasn't. ## Getting guile to work in org It sould be as simple as adding `(scheme +guile)` to `:tools` in `.doom.d/init.el` but there's something funky going on between geiser and org babel in my version of doom --- whenever I'd try to execute a code block, I'd get an error saying `symbol's function definition is void run-geiser`. I dug into the changelogs and found that `run-geiser` had been deprecated and renamed just `geiser`, but it looks like my version of org/bable doesn't know that. Thankfully, the new function has the same signature as the old one, so I was able to bring it back by adding the following to my `.doom.d/config.el`: ```elisp (defun run-geiser (&rest args) (apply 'geiser args)) ``` ## Running tests in org Since I'll be experimenting, it would be nice to have tests. And, since I'm taking notes, I might want to be writing code in one block and writing the tests in another. I tried using [bable sessions](https://orgmode.org/manual/Environment-of-a-Code-Block.html#Using-sessions-1) but they both made emacs lock up when executing code blocks and didn't give me test output in my org file, so that was a no-go. However, you can reference names blocks among one another, which means I can do the following: ```org * Tests in org mode First, we write a code block that had our module #+NAME: multi-block-test #+BEGIN_SRC scheme :tangle yes :noweb yes :results output (define-module (hey)) (define-public sup (lambda () "hey world!")) #+END_SRC #+RESULTS: multi-block-test Then, we write our test! #+NAME: multi-block-test-tests #+BEGIN_SRC scheme :tangle yes :noweb yes :results output <<multi-block-test>> (use-modules (srfi srfi-64)) (test-begin "harness") (test-equal "test-hello" "hey world!" (sup)) (test-end "harness") #+END_SRC #+RESULTS: multi-block-test-tests : %%%% Starting test harness (Writing full log to "harness.log") : # of expected passes 1 ``` This does almost exactly what i want. It's a little annoying to have to name every block and then include it like that, but I can honestly probably write an elisp function that makes the inclusion super simple at least.