Browse Source

Make template copy function more robust

Instead of going upward from the end, we now just start from the beginning and
skip all drawers we may encounter.  This should also allow to copy subtrees in
templates, although adjustments to the headline indentations might be necessary
if the template and point are on different levels.
master
Daniel Borchmann 5 months ago
parent
commit
cedaae00e8
No known key found for this signature in database
GPG Key ID: 1C7071A75BB72D64
  1. 27
      site-lisp/db-org.el

27
site-lisp/db-org.el

@ -603,18 +603,23 @@ query for it."
(save-mark-and-excursion
(let ((template-element (org-with-point-at pom
(org-element-at-point))))
;; Starting from the end of the last element in the subtree,
;; we go up until we find a drawer or a headline; everything
;; in between is considered to be the body.
(let ((content-end (org-element-property :contents-end template-element))
content-begin current-element)
(goto-char content-end)
(while (progn
(setq current-element (org-element-at-point))
(not (memq (org-element-type current-element)
'(drawer property-drawer headline))))
(setq content-begin (org-element-property :begin current-element))
(goto-char (1- content-begin)))
current-element
content-begin)
;; Start finding the beginning of the template contents from the top …
(goto-char (org-element-property :contents-begin template-element))
;; … but skip any drawers we may find.
(setq current-element (org-element-at-point))
(while (memq (org-element-type current-element)
'(drawer property-drawer))
(goto-char (org-element-property :end current-element))
(setq current-element (org-element-at-point)))
;; Now we are at the beginning of the contents, let's copy
;; that, but only if it exists and is not empty.
(setq content-begin (org-element-property :begin current-element))
(unless (and content-begin
(< content-begin content-end))
(user-error "Cannot find content in template, or content is empty"))
(string-trim-right
(buffer-substring-no-properties content-begin content-end))))))))
(insert body)

Loading…
Cancel
Save