I use the Emacs thermonuclear word
everything in my life that has to do with editing text. It’s
extensibility is unmatched by any other editor out there; if there’s a
feature missing that would make your life easier, then pop open the
hood and add it! While it’s not the prettiest language to work with,
Emacs Lisp (or elisp) is a pretty straight forward, yet deeply
powerful extension language.
The following bit of elisp adds a new function for creating empty blog
posts for the Jekyll static blogging
system. It creates the basic preamble and
names the file according to the title of the blog post!
We first start out with some directories. Change
point to wherever you store the source for your Jekyll blog/website.
(setq blog-base-dir "/home/bryan/Projects/personal-site/")
(setq blog-posts-dir (concat blog-base-dir "_posts/"))
Next we introduce a helper function for converting a blog title to a
proper file name. Essentially we strip out and replace any non file
name-friendly characters with dashes and all that.
(defun title-to-file-name (title)
(replace-regexp-in-string "[^[:alnum:][:space:]]" "" title)))
Finally we have the main function. The
(interactive ...) bit allows
us to call this function interactively (i.e. you can type M-x
new-blog-post in any buffer and it will execute the function.) When
invoked interactively you will be prompted to input a blog post
title. This title will then be used, along with today’s date, to
create the file name and preamble for the blog. The remaining bits of
the function open the (new) file with the created name in the proper
directory in a new buffer, and insert the preamble the Jekyll uses to
create your webs pages.
(defun new-blog-post (title)
"Prompt for a blog post title, then create the file with the
(interactive "sTitle: ")
(let ((file-name (title-to-file-name title))
(todays-date (shell-command-to-string "echo -n $(date +%Y-%m-%d)")))
(find-file (concat blog-posts-dir todays-date "-" file-name))
(insert "layout: post")
(insert (concat "title: " title))
Having this function around isn’t much in the grand scheme of
things. Since Jekyll uses plain text (either markdown or HTML) for
everything, it’s pretty easy to create new posts as it is. But it goes
to show you that even the tiniest bit of friction for getting
something started can be alleviated with a few minutes of programming
your text editor.