Templates and Snippets in Emacs

30 August 2020

I was only trying to write that last article, but it took me days to finally do it. I had so much work to do before I got there.

I had come to appreciate Emacs automatically inserting the boilerplate namespace declarations in new Clojure files, and I really thought I needed such convenience for my blog posts written in AsciiDoc in JBake. I dove down a 20-tab-deep, yak-shaving hole to get it done. [1]

I had to figure out the right search terms and names for what Emacs was doing for me. I finally found yatemplate which seems similar to yasnippets. Spacemacs has the templates layer for integrating yatemplate support, so I added that layer and created a template for my adoc files in my .emacs.d directory. My simple case worked, but I recognized that I’ll want that template on all my machines, so having a local copy of it wouldn’t cut it. I needed a way to check-in and version more Emacs/Spacemacs files than just my ~/.spacemacs files I was previously distributing.

I learned yasnippets would default to looking in ~/.spacemacs.d/ if the configuration was in there, so I had to move my ~/.spacemacs file over to ~/.spacemacs.d/init.el. To have the templates layer source templates from the .spacemacs.d directory, it required an extra bit of configuration when introducing it to the dotspacemacs-configuration-layers:

  (templates :variables templates-private-directory "~/.spacemacs.d/templates")

At this point, I could now commit my .spacemacs.d directory with the regular configuration file and the supporting templates and snippets. All those files will be cloned to all my workstations.

I was almost ready to write that article, but yasnippet and yatemplate have this fancy templating language. I’m sure that can make my article-creation even smarter! I read a bit more and found a couple cool elisp functions for automatically filling in the date and building a title from the file name. With the final enhancements to my adoc template, I could write the article, if I could only remember what I was trying to do in the first place. I hope to at least remember how to use these snippets and templates for future work.


1. I often measure task complexity in the number of tabs I end up having opened.


Split the Blogs

06 April 2017

Since the beginning when I rebuilt my blog with JBake, I intended to split and restyle the photography work from the tech work.

The photo work just disappeared from here, so now it can be found at John Flinchbaugh Photography.

Both sites are rebuilt whenever new content is pushed to their respective git repositories.


JBake with MarkupTemplateEngine

03 November 2016

JBake 2.5.0 got support for the MarkupTemplateEngine, so I wanted to give it a try, since structured code will be nicer than extreme scriptlet stuff that was happening in the original Groovy template example. The stock MTE example shows off MTE templates, but it also switched to Foundation in place of Bootstrap.

I’ve been looking forward to really learning Bootstrap for work and my personal projects, so I’m not looking to switch frameworks right now, so I rebuilt my own example project with MTE and Bootstrap based on the original Groovy/Bootstrap sample I had previously used.

Hopefully, I’ll get a little feedback and the JBake people will incorporate my contribution.


JBake

05 January 2016

I’ve moved the blog to a static site generated by JBake. The source for the content lives in my techblog project in Github, so I have a full versioning of my content for the small price of a git workflow.

I installed JBake using the familiar SDKMan that I already use to manage my Grails and Groovy installations. I initialized it with the Groovy templating engine and have started customizing the templates.

To make sure this thing is easy to update, I keep a local clone of the repo, so I can update it any time and push whenever I’m ready. I have a shell script scheduled to run on the server which basically does:

cd techblog
git fetch
git merge | grep "Already" > /dev/null || jbake

That little bit of code only runs jbake if the git pull doesn’t say "Already up-to-date". That provided me a simple little "continuous integration" hook that polls git for changes to trigger the build. I’ll probably use this trick in other places.

I brought all my old content from my old database into the new platform using a quick little Groovy script to dump out an HTML file for each article including the header of metadata for JBake’s use. While most of these old articles will remain HTML, I intend to use AsciiDoctor format for all the new stuff.

I’ve been collecting a long list of (mostly technical) articles to write, but replacing the old platform kept trumping my attempts to write. Hopefully, this move can open the flood gates, and eventually, I’ll break out another instance of it for the photography blog. JBake should make it easy and interesting to continue the blogs.


All the Posts

August 2020

April 2017

November 2016

January 2016