From 587280ea68e45f542634c05737dbc0a5540a1b88 Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Tue, 7 Oct 2014 16:59:23 +0100 Subject: [PATCH] org-capture: Better indentation when creating a new list lisp/org-capture.el (org-capture-place-item): When starting a new list use org-indent-line to establish the correct indentation rather than just using 0. Creating an entry in org-capture-templates of type item adds entries into a list, however, currently, if the list is empty then the first list item will always be indented to depth 0 (so hard on the left), which looks like this: * Top Level ** Second Level - item #1 - item #2 - item #3 This is fine if org-adapt-indentation is nil, however, with the default value of t lists should be indented more like this: * Top Level ** Second Level - item #1 - item #2 - item #3 The patch below changes org-capture-place-item so that, when starting a new list, the items are indented as above. Care is taken to preserve two features of the existing behaviour, first, when adding to an existing list, new items are indented to match the items already in the list. And secondly, when there is some introductory text before the list new items are inserted after the text, like this: * Top Level ** Second Level This is some introductory text: - item #1 - item #2 - item #3 TINYCHANGE --- lisp/org-capture.el | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/lisp/org-capture.el b/lisp/org-capture.el index 9e33d2536..9f8107e16 100644 --- a/lisp/org-capture.el +++ b/lisp/org-capture.el @@ -1075,21 +1075,18 @@ may have been stored before." (t (setq beg (1+ (point-at-eol)) end (save-excursion (outline-next-heading) (point))))) + (setq ind nil) (if (org-capture-get :prepend) (progn (goto-char beg) - (if (org-list-search-forward (org-item-beginning-re) end t) - (progn - (goto-char (match-beginning 0)) - (setq ind (org-get-indentation))) - (goto-char end) - (setq ind 0))) + (when (org-list-search-forward (org-item-beginning-re) end t) + (goto-char (match-beginning 0)) + (setq ind (org-get-indentation)))) (goto-char end) - (if (org-list-search-backward (org-item-beginning-re) beg t) - (progn - (setq ind (org-get-indentation)) - (org-end-of-item)) - (setq ind 0)))) + (when (org-list-search-backward (org-item-beginning-re) beg t) + (setq ind (org-get-indentation)) + (org-end-of-item))) + (unless ind (goto-char end))) ;; Remove common indentation (setq txt (org-remove-indentation txt)) ;; Make sure this is indeed an item @@ -1097,17 +1094,22 @@ may have been stored before." (setq txt (concat "- " (mapconcat 'identity (split-string txt "\n") "\n ")))) + ;; Prepare surrounding empty lines. + (org-capture-empty-lines-before) + (setq beg (point)) + (unless (eolp) (save-excursion (insert "\n"))) + (unless ind + (org-indent-line) + (setq ind (org-get-indentation)) + (delete-region beg (point))) ;; Set the correct indentation, depending on context (setq ind (make-string ind ?\ )) (setq txt (concat ind (mapconcat 'identity (split-string txt "\n") (concat "\n" ind)) "\n")) - ;; Insert, with surrounding empty lines - (org-capture-empty-lines-before) - (setq beg (point)) + ;; Insert item. (insert txt) - (or (bolp) (insert "\n")) (org-capture-empty-lines-after 1) (org-capture-position-for-last-stored beg) (forward-char 1)