Asgardian's Blog

Create a blog entry file.

I write my posts with Emacs and org-mode. Org-mode and Emacs are very powerfull and customizable.

I recently discovered a very complete and easy to use templating engine, tempel.

I write a template with all properties needed by Pelican.

I my template file, I add this folowing lines.

(blog "#+TITLE: " p n
      "#+DATE: " (format-time-string "%Y-%m-%d %H:%M:%S") n
      "#+CATEGORY: " p n
      "#+AUTHOR: " (format "%s" user-nickname)
      "#+PROPERTY: SUMMARY " p n
      "#+PROPERTY: SLUG " n
      "#+PROPERTY: TAGS " p n
      "#+PROPERTY: STATUS draft" n n

When, you execute this tempalte with Meta-+ for example. The cursor is placed just after TITLE. When you hit Meta-}, the cursor go to after CATEGORY and so on. Some fields are automatically completed :

  • DATE with the date of the day in format YYYY-MM-DD hh:mm:ss.
  • Author with the value of user-nickname.

I wrote two tiny functions :

  • capture-blog-entry-file who ask the name of the post. This name is not really the name of the file because, I will use the creation date. So for a post named blog entry, the will be named 20221110204243-blog
(defun capture-blog-entry-file ()
  "Capture the full path name of th entry."
  (let ((name (read-string "Name: ")))
    (expand-file-name(format ""
                             (format-time-string "%Y%m%d%H%M%S")
                             name) blog-content-directory)
  • capture-blog-entry just call capture-blog-entry-file and the tempel command tempel-insert with the template name as parameter.
(defun capture-blog-entry ()
  "Capture a new blog entry"

  (find-file (capture-blog-entry-file))
  (tempel-insert 'blog)

To be more clean, I create a variable blog-content-directory to stock the path to create the post file.

(defvar blog-content-directory nil
  "The locatlization of your posts in your blog engine tree.")

(setq blog-content-directory "~/the/path/where/save/your/post")

It's not a complex development but these functions are practical and allow you to focus on writing your article.

I will create others functions like this to give me more little help.