From 04cea438e69a6b3d8fba060c02d80d2977ff9786 Mon Sep 17 00:00:00 2001 From: Eric Abrahamsen Date: Fri, 19 Dec 2014 16:48:22 +0800 Subject: [PATCH] Fix for `org-log-beginning' on empty entries * lisp/org.el (org-log-beginning): Check for the need to insert a drawer in all cases. --- lisp/org.el | 59 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index 1383d76..b3d4381 100755 --- a/lisp/org.el +++ b/lisp/org.el @@ -13613,35 +13613,36 @@ narrowing." (when (looking-at org-property-drawer-re) (goto-char (match-end 0)) (forward-line)) - (if (org-at-heading-p) (point) - (let ((end (save-excursion (outline-next-heading) (point))) - (drawer (org-log-into-drawer))) - (cond - (drawer - (let ((regexp (concat "^[ \t]*:" (regexp-quote drawer) ":[ \t]*$")) - (case-fold-search t)) - (catch 'exit - ;; Try to find existing drawer. - (while (re-search-forward regexp end t) - (let ((element (org-element-at-point))) - (when (eq (org-element-type element) 'drawer) - (let ((cend (org-element-property :contents-end element))) - (when (and (not org-log-states-order-reversed) cend) - (goto-char cend))) - (throw 'exit nil)))) - ;; No drawer found. Create one, if permitted. - (when create - (unless (bolp) (insert "\n")) - (let ((beg (point))) - (insert ":" drawer ":\n:END:\n") - (org-indent-region beg (point))) - (end-of-line -1))))) - (org-log-state-notes-insert-after-drawers - (while (and (looking-at org-drawer-regexp) - (progn (goto-char (match-end 0)) - (re-search-forward org-property-end-re end t))) - (forward-line))))) - (if (bolp) (point) (line-beginning-position 2))))) + (let ((end (save-excursion (when (org-at-heading-p) + (forward-line -1)) + (outline-next-heading) (point))) + (drawer (org-log-into-drawer))) + (cond + (drawer + (let ((regexp (concat "^[ \t]*:" (regexp-quote drawer) ":[ \t]*$")) + (case-fold-search t)) + (catch 'exit + ;; Try to find existing drawer. + (while (re-search-forward regexp end t) + (let ((element (org-element-at-point))) + (when (eq (org-element-type element) 'drawer) + (let ((cend (org-element-property :contents-end element))) + (when (and (not org-log-states-order-reversed) cend) + (goto-char cend))) + (throw 'exit nil)))) + ;; No drawer found. Create one, if permitted. + (when create + (unless (bolp) (insert "\n")) + (let ((beg (point))) + (insert ":" drawer ":\n:END:\n") + (org-indent-region beg (point))) + (end-of-line -1))))) + (org-log-state-notes-insert-after-drawers + (while (and (looking-at org-drawer-regexp) + (progn (goto-char (match-end 0)) + (re-search-forward org-property-end-re end t))) + (forward-line))))) + (if (bolp) (point) (line-beginning-position 2)))) (defun org-add-log-setup (&optional purpose state prev-state findpos how extra) "Set up the post command hook to take a note. -- 2.2.0