10 September 2025

Emacs Org Mode: Updating or Adding the #+date Property When a File is Written

We want to update or add the #+date: export property (or keyword) when an org mode file is saved.

This is accomplished by placing the following code in init.el:

(defun horizon/set-write-date-file-property (&rest ignore)
  "Set the write date in a file export property of org files."
  (message (format "Setting write date for file %s" (buffer-file-name)))
  (when (string-match "\.org$" (buffer-file-name) nil t)
    (progn
      (beginning-of-buffer)
      (setq h-time-stamp-string (format-time-string (org-time-stamp-format t nil)))
      (if (re-search-forward "^#\\+date:.+$" nil t 1) ;; hint: use M-x re-builder to figure out the regex
          (progn
            (message "#+date: found, replacing")
            (replace-match (format "#+date: %s" h-time-stamp-string)))
        (progn
          (message "#+date: not found, try adding after title, or at beginning og file")
          (beginning-of-buffer)
          (if (re-search-forward "^#\\+title:.+$" nil t 1) ;; find title
              (insert (format "\n#+date: %s" h-time-stamp-string)) ;; insert after title if found
            (progn ;; insert at top of file if title not found
              (beginning-of-buffer)
              (insert (format "#+date: %s\n" h-time-stamp-string))))
          ))))
  nil) ;; returning non-nil indicates that the file has been written in this hook

(add-hook 'write-file-functions #'horizon/set-write-date-file-property)
Tags: Lisp Org Mode Emacs