Next: Add a Custom_Id, Up: Update Old Project [Index]
This script replaces add-s3-bucket with more abstract code to add any
key-value combo after the ‘version’ macro. It takes two values, the key and
the value. It checks whether the key exists in the current Org file as
‘#+key:’. If it does, then it simply returns nil. If it does not, then it
adds ‘#+key:value" after the =version’ macro.
NOTE: there is already an org procedure called org-collect-keywords that
searches for and return key-value pairs; consider using it instead.
(defun add-key-value (key value)
"Check for the existence of a key KEY; if not found, add it
with value VALUE."
(with-current-buffer (car (find-file-noselect "*.org" nil nil t))
(goto-char (point-min))
(let* ((tree (project-tree (current-buffer)))
;; hl1 limits the search to the first headline
(hl1 (org-element-map tree (quote headline) (lambda (hl) (org-element-property :begin hl)) nil t)))
(message "In add-key-value; searching for key: %s..." key)
(if (re-search-forward (format "^#[+]%s:" key) hl1 t)
(message "...found.")
(progn
(message "...key: %s not found; adding value: %s..." key value)
(re-search-forward "^#[+]macro:version")
(beginning-of-line 2)
(insert (format "#+%s:%s" key value))
(message "Added #+%s:%s at point %d" key value (line-beginning-position))
(newline)
(save-buffer)
(revert-buffer t t t))))))