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."