Compare commits

...

2 Commits

Author SHA1 Message Date
Daniel - eafebe1cb9
Add simple function to directly render html from a file
This is simpler than opening the file in a buffer and calling shr-render-buffer,
with some buffer maneuvring afterwards.
2021-12-13 21:17:45 +01:00
Daniel - cedaae00e8
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.
2021-12-13 21:17:18 +01:00
2 changed files with 24 additions and 11 deletions

View File

@ -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)

View File

@ -20,6 +20,7 @@
(require 'calc-forms)
(require 'ert)
(require 's)
(require 'shr)
(autoload 'async-start "async")
(autoload 'lispy-mode "lispy")
@ -454,6 +455,13 @@ Does not replace CRLF with CRCRLF, and so on."
(file-exists-p (concat project "/.git"))))
projectile-known-projects))))
(defun db/shr-render-file (file)
"Display the HTML rending of the contents of FILE."
(interactive "f")
(unless (file-readable-p file)
(user-error "Cannot read file: %s" file))
(shr-render-buffer (find-file-noselect file)))
;; Base45 Decoding