practicalli (youtube)
practicalli-john 2020-12-03T01:27:27.195900Z

Editing of the Repl Driven Development video with Spacemacs has been completed. The edited video is now rendering and if I can stay awake long enough will be uploaded to YouTube soon, or in about 8 hours if I fall asleep first :)

practicalli-john 2020-12-03T09:20:53.199400Z

Presents have come early this year and the new video is available at The SD version has just finished processing, so you may need to wait a little while for the HD version. This is a 30 minute video and should cover the important aspects of REPL driven development. This is the first pre-recorded video I have done for a while, and the one that has taken the longest, so positive and constructive feedback is as always welcome. Thank you


Many thanks for making this. I’ve been watching bits of it today in between re:Clojure talks. I’ve already learned a few things (and I’ve been using Spacemacs for a while now). One thing that I’m struggling with is key bindings. I’m using the emacs key bindings (I never learned vi/vim). I assumed that the key bindings for Spacemacs things would be the same, with <space> replaced by meta-m but there were a few things that you do in the video that I can’t figure out. I guess the question is, how do I actually look up the key bindings for stuff like cider and clojure-mode in Spacemacs? I guess I can do C-h b and then search through a really long list of things. Is that the best way?

practicalli-john 2020-12-04T21:38:07.202300Z

@cdpjenkins SPC SPC is the same as M-x and in fact I am sure M-x is the usual Emacs command. Using that and typing a pattern will fuzzy match on names. If you do that in the relevant major mode it will show the key bindings next to the commands it lists (assuming they have key bindings). A command may only have a key binding in a particular major mode. TAB in the list of commands will show the docs for the command under the cursor without having to select the command

practicalli-john 2020-12-04T21:48:52.212400Z

When developing Clojure, use M-RET or M-m m in Emacs state to select the major mode menu (this is the same as when I use , in Evil normal state). This major mode will give you access to all the Cider related commands. When you see me do , e f to evaluate an expression you would do M-RET e f or M-m m e f

practicalli-john 2020-12-04T21:52:13.214400Z

SPC h d is a menu with key bindings for describing all sorts of Emacs things... commands, variables, faces, etc.

practicalli-john 2020-12-04T21:53:09.215700Z

If there is anything that’s not clear, just share the time index on the video and happy to elaborate


Ah brilliant, thanks. The thing that I had missed is that M-m in emacs mode is equivalent to , in vi mode (I thought it was equivalent to SPC).


(You might be able to imagine me watching your video and furiously hitting M-m , …. and getting frustrated when I couldn’t find anything…)

practicalli-john 2020-12-05T17:51:07.216300Z

That is a very good point. I've added the Emacs M-m key binding to the comment on the video to help others who may be using Emacs. Thanks.


Awesome thanks.


Something else I noticed: your Spacemacs setup has a few things set up that I don’t have, like company-mode. Is there anywhere that I can look in order to figure out how to get that working with spacemacs? I already tried adding the following to my .spacemacs`: (global-company-mode t) in user-config and

(auto-completion :variables                     auto-completion-use-company-box t)
in dotspacemacs-configuration-layers … I now get autocomplete but not company-mode working in Clojure source code buffers. 😕


I noticed you also had flycheck set up and working… is there some obvious spacemacs setup step that I might have missed off?

practicalli-john 2020-12-06T17:58:19.217300Z

My .spacemacs config is here... its the init.el file in .spacemacs.d


Many thanks. I confess I can’t get yours to work on my emacs (and I can’t figure out what is meaningfully different between yours and mind) but will spend some more time on it. If I can’t figure it out, where would be the best place to ask for help? (I’m guessing that this isn’t the best place 🙂 )

practicalli-john 2020-12-06T18:09:50.217700Z

are you aware you cant have both a .spacemacs and a .spacemacs.d configuration, the .spacemacs will take preference

practicalli-john 2020-12-06T18:15:33.217900Z

The flycheck needs the syntax-checking layer and then add clojure-enable-linters 'clj-kondo as a variable to the clojure layer. Assuming you are using Spacemacs develop

(clojure :variables
              clojure-toplevel-inside-comment-form t
              cider-overlays-use-font-lock t
              cider-preferred-build-tool 'clojure-cli
              clojure-enable-linters 'clj-kondo
              clojure-enable-clj-refactor t)


Ah so it turns out I don’t have a working clj-kondo and I certainly don’t have the clojure-enable-linters 'clj-kondo config so I will try to get that working - thank you!

practicalli-john 2020-12-06T18:30:01.218400Z

Suggest checking your .spacemacs file against the template, to see if there have been any updates. SPC f e D will open ediff with the relevant files. This should be done each time you update Spacemacs itself (not the packages, but pulling a new version of the spacemacs code in .emacs.d

practicalli-john 2020-12-06T18:30:49.218600Z

Of course you will know that having read my book 🙂


^^^ I totally need to read that


I now have clj-kondo working 🙂… still lots more to figure out but I’ll have another look at the book when I get some more time.


Many thanks John - you rule!

practicalli-john 2020-12-06T18:34:32.219400Z

If you get stuck for more than a few minutes, just ask quesions...


Cool I will totally take you up on that - thank you 🙂


I’m definitely getting there… A few weeks ago, I was still on my circa-2013 custom emacs config and I’ve switched to Spacemacs and got most of the things working (and many new things that Spacemacs sets up for me so I don’t have to). I’m now fairly productive working in Clojure again (or at least productive as someone with very rusty Clojure skills can be) so I’m very grateful for that!