The Chronicle

of a ColdFusion Expatriate

Introducing Octopress.el

January 23, 2016

If you've ever scrolled all the way to the bottom of this blog, you'll know that I use Octopress (a Jekyll-powered blogging system written in Ruby) to build it. What I like about Octopress is a subject for a different post, but I like it a lot.

Of course, as an Emacs user, it pains me to drop to a command line to do something that should be part of a fluid text editing workflow, and blogging is a great example of such a scenario.

To solve that problem, I wrote Octopress.el, an Emacs package for blogging with Octopress. Using Octopress.el, you can view your drafts and posts, publish, unpublish, build, preview, and even deploy your Octopress blog right from within Emacs!

Octopress.el can be installed right now from MELPA (package name: octopress), or downloaded from my Github (repository: octopress.el). Go get it, give it a try, send me issues or pull requests, and get blogging!

If you want to go on more of a detailed tour, continue reading!

How To Octopress

Naturally you need to have Octopress. I won't cover how to get started with it; if you want to begin using Octopress, follow the instructions here. Note that Octopress.el will only work with Octopress 3.0, the gem distribution of Octopress.

It's recommended that you use Bundler to install Octopress. If you have done so, and a Gemfile is present, all Octopress commands will be prefixed with bundler exec automatically so that your project local gems are used.

The only configuration that Octopress.el requires is the location of your blog. At this time, it only supports working on a single blog. If you begin to use Octopress.el without configuring your blog location, you will be prompted to enter it.

You can preconfigure your blog location by setting the custom value octopress-blog-root through the customize facility, or by setting the variable in your init files somewhere. If you have only one blog, this is convenient because you can run Octopress.el from anywhere within Emacs and begin working on that blog.

Starting Octopress.el

The main entry point into Octopress.el is the interactive function octopress-status. Similar to Magit and others, that function will pop to a status buffer displaying statistics about your blog and file lists that you can use to interact with your posts and drafts.

Several key bindings are available and you can view a menu of them by pressing ?. The “Drafts” and “Posts” headings can be expanded or collapsed by pressing TAB, and pressing RET on a file item will open it for editing.

Creating and Previewing

Most of the commands should be self-explanatory, but I will go into a little bit of detail on the “build” and “server” functions because they are slightly more complicated.

Some commands have sub-selections or flags. For example, when you press c to create a new item, you will be prompted to choose whether you want to create a “draft,” “post,” or “page.” Press the letter in brackets to indicate your selection.

The “build” and “server” commands have flags, which configure which objects are included in your build or served by the local preview server. By pressing the letters in brackets, the color of the item will change to indicate whether the flag is on or off. To accommodate sight disabilities, the faces used for enabled and disabled flags is customizable through the customize facility. In addition, the default flag settings can also be customized.

Publishing and Unpublishing

Once you are happy with a draft and you're ready to publish, select the draft in the list and press P. Octopress will convert your draft into a published post and, if that draft is open in some window, Octopress.el will swap the window contents to display the post. If you elect to unpublish a post, the opposite will happen.

Note that if you remove the “date” metadata from a post before unpublishing it, Octopress will throw a confusing nil error and fail. This is just an Octopress thing, so don't mess with the posted date until it's converted back to a draft.

Happy Blogging

So that's it, a crash course on Octopress.el. I hope you enjoy using it as much as I do, and if you find issues please open them on the Github repository so I can dig in, or better yet, send a pull request with your fix!

Comments