Rens Oliemans <ha...@rensoliemans.nl> writes: > * lisp/org-capture.el (org-capture-place-entry): Prepend heading to > template if the template does not yet start with a heading. > > * testing/lisp/test-org-capture.el (test-org-capture/entry): Add two > tests: no error is raised when org-capture is called with a template > that does not start with a heading; and org-capture should error with > a template with a lower heading after a higher heading. > > Link: https://list.orgmode.org/877chnc0lr.fsf@localhost/ > --- > First iteration of these patches, please let me know if anything can be > improved, either > about the code or patches themselves (I am not used to sending patches via > email).
Thanks! I have improved your patches a little, fixing the regular expression used to match headings ("^*" is not accurate, you need org-outline-regexp-bol), and adding another test case. See the attached. Before I install the patches, may I know if you have FSF copyright assignment? See https://orgmode.org/worg/org-contribute.html#copyright
>From 36639ac711f099b49900d886ad28d29abc1b29ed Mon Sep 17 00:00:00 2001 Message-ID: <36639ac711f099b49900d886ad28d29abc1b29ed.1713102029.git.yanta...@posteo.net> From: Rens Oliemans <ha...@rensoliemans.nl> Date: Sun, 14 Apr 2024 13:24:49 +0200 Subject: [PATCH v2 1/2] org-capture: Allow entry template to start without heading * lisp/org-capture.el (org-capture-place-entry): Prepend heading to template if the template does not yet start with a heading. * testing/lisp/test-org-capture.el (test-org-capture/entry): Add two tests: no error is raised when org-capture is called with a template that does not start with a heading; and org-capture should error with a template with a lower heading after a higher heading. Link: https://list.orgmode.org/877chnc0lr.fsf@localhost/ --- lisp/org-capture.el | 2 ++ testing/lisp/test-org-capture.el | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/lisp/org-capture.el b/lisp/org-capture.el index da14f45c0..a95a38162 100644 --- a/lisp/org-capture.el +++ b/lisp/org-capture.el @@ -1198,6 +1198,8 @@ (defun org-capture-place-entry () (exact-position (org-capture-get :exact-position)) (insert-here? (org-capture-get :insert-here)) (level 1)) + (unless (string-match org-outline-regexp-bol template) + (setq template (concat "* " template))) (org-capture-verify-tree template) (when exact-position (goto-char exact-position)) (cond diff --git a/testing/lisp/test-org-capture.el b/testing/lisp/test-org-capture.el index 0ed44c6af..4e9139c40 100644 --- a/testing/lisp/test-org-capture.el +++ b/testing/lisp/test-org-capture.el @@ -244,6 +244,30 @@ (ert-deftest test-org-capture/entry () :immediate-finish t)))) (org-capture nil "t") (buffer-string)))) + ;; Do not raise an error on templates that do not start with a heading. + (should + (org-test-with-temp-text-in-file "" + (let* ((file (buffer-file-name)) + (org-capture-templates + `(("t" "Test" entry (file ,file) "Foo" + :immediate-finish t)))) + (org-capture nil "t")))) + (should + (org-test-with-temp-text-in-file "" + (let* ((file (buffer-file-name)) + (org-capture-templates + `(("t" "Test" entry (file ,file) "*bold*" + :immediate-finish t)))) + (org-capture nil "t")))) + ;; Raise an error on templates with a lower level heading after a + ;; higher level one. + (should-error + (org-test-with-temp-text-in-file "" + (let* ((file (buffer-file-name)) + (org-capture-templates + `(("t" "Test" entry (file ,file) "** X\n* Y" + :immediate-finish t)))) + (org-capture nil "t")))) ;; With a 0 prefix argument, ignore surrounding lists. (should (equal "Foo\n* X\nBar\n" -- 2.44.0
>From af0b56f3338b8700bd6096e4963c95436b1a14b0 Mon Sep 17 00:00:00 2001 Message-ID: <af0b56f3338b8700bd6096e4963c95436b1a14b0.1713102029.git.yanta...@posteo.net> In-Reply-To: <36639ac711f099b49900d886ad28d29abc1b29ed.1713102029.git.yanta...@posteo.net> References: <36639ac711f099b49900d886ad28d29abc1b29ed.1713102029.git.yanta...@posteo.net> From: Rens Oliemans <ha...@rensoliemans.nl> Date: Sun, 14 Apr 2024 13:24:51 +0200 Subject: [PATCH v2 2/2] org-capture: Allow table-line entry to start without | * lisp/org-capture.el (org-capture-place-table-line): Prepend table-line begin ('|') if the template does not start with it. * testing/lisp/test-org-capture.el (test-org-capture/table-line): Verify that a template gets prepended with a '|' if it does not start with it. --- lisp/org-capture.el | 15 ++++++++------- testing/lisp/test-org-capture.el | 10 ++++++++++ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lisp/org-capture.el b/lisp/org-capture.el index a95a38162..205d09da8 100644 --- a/lisp/org-capture.el +++ b/lisp/org-capture.el @@ -1356,13 +1356,14 @@ (defun org-capture-place-item () (defun org-capture-place-table-line () "Place the template as a table line." (require 'org-table) - (let ((text - (pcase (org-trim (org-capture-get :template)) - ((pred (string-match-p org-table-border-regexp)) - "| %?Bad template |") - (text (concat text "\n")))) - (table-line-pos (org-capture-get :table-line-pos)) - beg end) + (let* ((template (org-trim (org-capture-get :template))) + (text + (pcase template + ((pred (string-match-p org-table-border-regexp)) + (concat "| " template)) + (text (concat text "\n")))) + (table-line-pos (org-capture-get :table-line-pos)) + beg end) (cond ((org-capture-get :exact-position) (org-with-point-at (org-capture-get :exact-position) diff --git a/testing/lisp/test-org-capture.el b/testing/lisp/test-org-capture.el index 4e9139c40..f97d08bce 100644 --- a/testing/lisp/test-org-capture.el +++ b/testing/lisp/test-org-capture.el @@ -613,6 +613,16 @@ (ert-deftest test-org-capture/table-line () "| 2 |" :immediate-finish t)))) (org-capture nil "t")) (buffer-string)))) + ;; Prepend | when the template does not start with it + (should + (equal "| 1 |\n| 2 |\n" + (org-test-with-temp-text-in-file "| 1 |\n" + (let* ((file (buffer-file-name)) + (org-capture-templates + `(("t" "Table" table-line (file ,file) + "2 |" :immediate-finish t)))) + (org-capture nil "t") + (buffer-string))))) ;; When `:prepend' is nil, add the row at the end of the table. (should (equal "| a |\n| x |\n" -- 2.44.0
-- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>