I'm writing this post in emacs. I know that may not seem like a big deal, but trust me, it's a big deal. See: here's a screenshot proving this:
My blog is hosted by Blogger, and with the exception of a bit of command line hacking, I've always edited my posts at blogger.com.
Every few years I look around for an emacs friendly Blogger solution but have never found a fit. That changed when I stumbled over oauth2.el. Using this library, I found that I could trivially make authenticated requests to the Blogger API. While interesting, it wasn't immediately obvious what I could use it for. On one hand, I knew I didn't want to build out a full Blogger emacs interface. On the other, it would be sweet if I could somehow leverage emacs for post editing. And thus, hbo-blogger.el was born.
The hbo in hbo-blogger stands for Half-Baked Opportunistic. In other words, this isn't some finely crafted Blogger emacs library. This is me taking every shortcut I can find to somehow mash emacs and Blogger together. As klugy as this sounds, I'm amazed at how well this all came together.
At it's core: hob-blogger offers two key functions:
;; Downloads the latest draft post and loads it into ;; an emacs buffer (hbo-blogger-edit-latest-draft-post "[your blog's URL]")) ;; Saves the current buffer, which is specially named with the ;; blog-id and post-id back to Blogger (hbo-blogger-save-buffer)
With thest two functions, I can seamlessly take a draft post I've started in Blogger, load it into emacs and continue editing it there. I can then use the hbo-blogger-save-buffer to save my writing back at blogger.com.
To glue this together, I've added a new interactive command to my init.el:
(defun blogbyben-edit-latest-draft-post () (interactive) (hbo-blogger-edit-latest-draft-post "http://www.blogbyben.com"))
This allows me to type M-x blogbyben-edit-latest-draft-post and I'm off and running. When this function runs it adds hbo-blogger-save-buffer to the post's after-save-hook. The result: saving a post saves the file locally and pushes the content back to Blogger.
Most of this functionality came together with ease. One big catch: the PATCH functionality promised in the Blogger API only works on published posts. If you look at hbo-blogger.el you'll notice I had to fallback on the more clunky PUT call.
While functional, I can see a number of obvious improvements to this library. It should be trivial to add hbo-blogger-new-draft-post to create an empty draft post via emacs. I'm sure there's a menu library I could leverage to show a list of recent Blogger posts and let me choose one to edit from there. I wrote my code using url-retrieve-synchronously when I almost certainly should be using url-retrieve. Finally, I'm sure I'm committing many a sin with the way I'm loading up post buffers. The hard coded call to web-mode, for example, is almost certainly a no-no.
But even with these limitations, I just composed my first Blogger post in emacs and it was awesome! The whole process Just Worked.
You can grab the code for hbo-blogger.el over at github.com.
No comments:
Post a Comment