branch: externals/org-transclusion
commit 4860724acc959170c8029c8afdaf90e89c16b6b1
Author: Noboru Ota <[email protected]>
Commit: Noboru Ota <[email protected]>
feat: "auto" level property #195 #254
---
org-transclusion.el | 23 +++++++++++++++--------
test/test-2.0.org | 19 +++++++++++++++++++
2 files changed, 34 insertions(+), 8 deletions(-)
diff --git a/org-transclusion.el b/org-transclusion.el
index 6d539e35b7..da3848b900 100644
--- a/org-transclusion.el
+++ b/org-transclusion.el
@@ -801,9 +801,10 @@ It needs to be set in
It is meant to be used by `org-transclusion-get-string-to-plist'.
It needs to be set in
`org-transclusion-keyword-value-functions'."
- (when (string-match ":level *\\([1-9]\\)" string)
- (list :level
- (string-to-number (org-strip-quotes (match-string 1 string))))))
+ (and-let* ((_ (string-match ":level *\\([1-9]?\\)" string))
+ (match (match-string 1 string))
+ (val (if (string-empty-p match) "auto" (string-to-number match))))
+ (list :level val)))
(defun org-transclusion-keyword-value-only-contents (string)
"It is a utility function used converting a keyword STRING to plist.
@@ -873,7 +874,9 @@ keyword. If not, returns nil."
(concat custom-properties-string " " str ))))))
(concat "#+transclude: "
link
- (when level (format " :level %d" level))
+ (when level (if (and (stringp level) (string= level "auto"))
+ " :level "
+ (format " :level %d" level)))
(when disable-auto (format " :disable-auto"))
(when only-contents (format " :only-contents"))
(when exclude-elements (format " :exclude-elements \"%s\""
@@ -1025,8 +1028,7 @@ Return nil if not found."
;;-----------------------------------------------------------------------------
;;;; Functions for inserting content
-(defun org-transclusion-content-insert ( keyword-values type content
- sbuf sbeg send copy)
+(defun org-transclusion-content-insert (keyword-values type content sbuf sbeg
send copy)
"Insert CONTENT at point and put source overlay in SBUF.
Return t when successful.
@@ -1055,7 +1057,8 @@ based on the following arguments:
(tc-buffer (current-buffer))
(ov-src (text-clone-make-overlay sbeg send sbuf)) ;; source-buffer
overlay
(tc-pair ov-src)
- (content content))
+ (content content)
+ (current-level (or (org-current-level) 0)))
(when (org-transclusion-type-is-org type)
(with-temp-buffer
;; This temp buffer needs to be in Org Mode
@@ -1063,7 +1066,11 @@ based on the following arguments:
(delay-mode-hooks (org-mode))
(insert content)
(org-with-point-at 1
- (let* ((to-level (plist-get keyword-values :level))
+ (let* ((raw-to-level (plist-get keyword-values :level))
+ (to-level (if (and (stringp raw-to-level)
+ (string= raw-to-level "auto"))
+ (1+ current-level)
+ raw-to-level))
(level (org-transclusion-content-highest-org-headline))
(diff (when (and level to-level) (- level to-level))))
(when diff
diff --git a/test/test-2.0.org b/test/test-2.0.org
index fd5500c50c..e78d71bc80 100644
--- a/test/test-2.0.org
+++ b/test/test-2.0.org
@@ -230,3 +230,22 @@ Temporarily set ~org-transclusion-include-first-section~
to nil
# id-1234 end here
return fname # return this to org-mode
#+end_src
+* Test "auto" level
+
+ #+transclude: [[file:bertrand-russell.org::*On Denoting]] :level
+
+*** A auto level
+
+ #+transclude: [[file:bertrand-russell.org::*On Denoting]] :level
:exclude-elements "headline drawer"
+
+
+ #+transclude: [[file:bertrand-russell.org::*On Denoting]] :level 3
:exclude-elements "headline drawer"
+
+*** First sectiona and "auto" level
+
+#+begin_src emacs-lisp
+ (setq org-transclusion-include-first-section nil)
+ (setq org-transclusion-include-first-section t)
+#+end_src
+
+ #+transclude: [[file:./test-no-first-section.org]] :level