Now that I am writing all my blog posts using orgmode, I wanted a way to create the file I need for a new post automatically. I couldn't find quite what I wanted, so here is my attempt and writing some elisp to make it happen.
(defun s-dashed-words (words) (downcase (replace-regexp-in-string "[^a-z0-9]+" "-" words))) (defun ps/new-hugo-post (title &optional) "Create and visit a new draft blog post for the prompted TITLE. The file for the blog post conforms to the path schema of posts for petersmith.org" (interactive "sTitle: ") (let* ((post-dir (concat ps/data "Code/Websites-source/petersmith/content/blog/" (format-time-string "%Y%m%d-") (s-dashed-words title) "/")) (post-fpath (concat post-dir "index.org")) (post-slug (s-dashed-words title)) (post-date (format-time-string "%+4Y-%m-%dT%H:%M:%S%:z"))) (make-directory post-dir t) (write-region (concat "\n#+title: " title "\n#+date: " post-date "\n#+lastmod: " post-date "\n#+categories: Tech" "\n#+tags: " "\n#+slug: " post-slug "\n#+draft: False" "\n\n") nil (expand-file-name post-fpath) nil nil nil t) (find-file (expand-file-name post-fpath))))
I modified Jeremy's code a bit to allow for the fact that I use Hugo's page bundles.