branch: externals/org
commit ec2724e20085f8153f0d0aeb6129b470549b6785
Author: Ihor Radchenko <yanta...@posteo.net>
Commit: Ihor Radchenko <yanta...@posteo.net>

    org-capture: Obey `org-blank-before-new-entry' when capturing entries
    
    * lisp/org-capture.el (org-capture-place-entry): Check if user
    configured adding empty lines before new headings globally.
    (org-capture-place-item): Add FIXME.  The same for lists does not
    easily work (no clear API how to do it in org-list).
    * testing/lisp/test-org-capture.el (test-org-capture/entry):
    (test-org-capture/item): Add new test cases.
    
    Link: 
https://orgmode.org/list/0ecb15d842451fbdb3d10258321f3...@purelymail.com
---
 lisp/org-capture.el              |  9 ++++-
 testing/lisp/test-org-capture.el | 76 +++++++++++++++++++++++++++++++++++++++-
 2 files changed, 83 insertions(+), 2 deletions(-)

diff --git a/lisp/org-capture.el b/lisp/org-capture.el
index 08cf4ca99d..02a1ea8330 100644
--- a/lisp/org-capture.el
+++ b/lisp/org-capture.el
@@ -1304,7 +1304,12 @@ may have been stored before."
           (org-fold-region (max 1 (1- (point-max))) (point-max) nil))))
     (let ((origin (point-marker)))
       (unless (bolp) (insert "\n"))
-      (org-capture-empty-lines-before)
+      (org-capture-empty-lines-before
+       (or (org-capture-get :empty-lines-before)
+          (org-capture-get :empty-lines)
+           (when (and (org--blank-before-heading-p)
+                      (not (org-previous-line-empty-p)))
+             1)))
       (let ((beg (point)))
        (save-restriction
          (when insert-here? (narrow-to-region beg beg))
@@ -1383,6 +1388,8 @@ may have been stored before."
        (org-capture-empty-lines-before
         (and item
              (not prepend?)
+              ;; FIXME: We should obey `org-blank-before-new-entry'
+              ;; when :empty-lines* is not given.
              (min 1 (or (org-capture-get :empty-lines-before)
                         (org-capture-get :empty-lines)
                         0)))))
diff --git a/testing/lisp/test-org-capture.el b/testing/lisp/test-org-capture.el
index 7673347ed0..494fee4cf5 100644
--- a/testing/lisp/test-org-capture.el
+++ b/testing/lisp/test-org-capture.el
@@ -455,6 +455,44 @@
                    `(("t" "Test" entry (file ,file) "* X"
                       :immediate-finish t :empty-lines 1))))
              (org-capture 0 "t")
+             (buffer-string)))))
+  ;; when :empty-lines not provided, obey `org-blank-before-new-entry'
+  (should
+   (equal "Foo\n* Bar\n\n* X\n"
+         (org-test-with-temp-text-in-file "Foo\n* Bar"
+           (forward-line)
+           (let* ((file (buffer-file-name))
+                   (org-blank-before-new-entry
+                    '((heading . t)))
+                  (org-capture-templates
+                   `(("t" "Test" entry (file ,file) "* X"
+                      :immediate-finish t))))
+             (org-capture nil "t")
+             (buffer-string)))))
+  (should
+   (equal "Foo\n* Bar\n* X\n"
+         (org-test-with-temp-text-in-file "Foo\n* Bar"
+           (forward-line)
+           (let* ((file (buffer-file-name))
+                   (org-blank-before-new-entry
+                    '((heading . nil)))
+                  (org-capture-templates
+                   `(("t" "Test" entry (file ,file) "* X"
+                      :immediate-finish t))))
+             (org-capture nil "t")
+             (buffer-string)))))
+  ;; but prefer :empty-lines
+  (should
+   (equal "Foo\n* Bar\n\n\n* X\n"
+         (org-test-with-temp-text-in-file "Foo\n* Bar"
+           (forward-line)
+           (let* ((file (buffer-file-name))
+                   (org-blank-before-new-entry
+                    '((heading . nil)))
+                  (org-capture-templates
+                   `(("t" "Test" entry (file ,file) "* X"
+                      :immediate-finish t :empty-lines-before 2))))
+             (org-capture nil "t")
              (buffer-string))))))
 
 (ert-deftest test-org-capture/item ()
@@ -693,7 +731,43 @@
                    `(("t" "Test" item (file ,file) "- X"
                       :immediate-finish t :empty-lines 1))))
              (org-capture 0 "t")
-             (buffer-string))))))
+             (buffer-string)))))
+  ;; FIXME: This is not currently working.
+  ;; when :empty-lines not provided, obey `org-blank-before-new-entry'
+  ;; (should
+  ;;  (equal "Foo\n- A\n- X\n"
+  ;;         (org-test-with-temp-text-in-file "Foo\n- A"
+  ;;           (let* ((file (buffer-file-name))
+  ;;                  (org-blank-before-new-entry
+  ;;                   '((plain-list-item . nil)))
+  ;;              (org-capture-templates
+  ;;               `(("t" "Test" item (file ,file) "- X"
+  ;;                  :immediate-finish t))))
+  ;;             (org-capture nil "t")
+  ;;             (buffer-string)))))
+  ;; (should
+  ;;  (equal "Foo\n- A\n\n- X\n"
+  ;;         (org-test-with-temp-text-in-file "Foo\n- A"
+  ;;           (let* ((file (buffer-file-name))
+  ;;                  (org-blank-before-new-entry
+  ;;                   '((plain-list-item . t)))
+  ;;              (org-capture-templates
+  ;;               `(("t" "Test" item (file ,file) "- X"
+  ;;                  :immediate-finish t))))
+  ;;             (org-capture nil "t")
+  ;;             (buffer-string)))))
+  ;; but prefer :empty-lines
+  (should
+   (equal "Foo\n- A\n\n- X\n"
+          (org-test-with-temp-text-in-file "Foo\n- A"
+            (let* ((file (buffer-file-name))
+                   (org-blank-before-new-entry
+                    '((plain-list-item . nil)))
+                  (org-capture-templates
+                   `(("t" "Test" item (file ,file) "- X"
+                      :immediate-finish t :empty-lines 1))))
+              (org-capture nil "t")
+              (buffer-string))))))
 
 (ert-deftest test-org-capture/table-line ()
   "Test `table-line' type in capture template."

Reply via email to