[O] Bug: property drawer created within other drawers
Dear developers Property drawers for certain items end up getting created within an already existing LOGBOOK drawer. The problem is that the first while loop in org-insert-property-drawer is also matching CLOCK lines within the drawer, so it reads into the drawer instead of stopping before it. I discovered a matching report that was already submitted by Sebastien Vauban (http://article.gmane.org/gmane.emacs.orgmode/78881). Problematic code in org.el: (defun org-insert-property-drawer () ;... (let ((indent (if org-adapt-indentation (- (match-end 0) (match-beginning 0)) 0)) (beg (point)) (re (concat ^[ \t]* org-keyword-time-regexp)) end hiddenp) (outline-next-heading) (setq end (point)) (goto-char beg) (while (re-search-forward re end t)) ; === problem I did a quick fix using the following construct: (let ((indent (if org-adapt-indentation (- (match-end 0) (match-beginning 0)) 0)) (beg (point)) (re (concat ^[ \t]* org-keyword-time-regexp)) end hiddenp) (outline-next-heading) (setq end (point)) (goto-char beg) (next-line) (while (looking-at re) (next-line)) (setq hiddenp (outline-invisible-p)) ; comment-out: (end-of-line 1) ; comment-out: (and (equal (char-after) ?\n) (forward-char 1)) Here's a typical task, where the original code will fail and place the property drawer just before the end of the LOGBOOK drawer. *** DONE some task CLOSED: [2013-07-10 Wed 14:11] DEADLINE: 2013-06-03 Mon SCHEDULED: 2013-07-08 Mon :LOGBOOK: - State DONE from WAIT [2013-07-10 Wed 14:11] CLOCK: [2013-05-17 Fri 17:07]--[2013-05-17 Fri 17:16] = 0:09 CLOCK: [2013-05-08 Wed 14:30]--[2013-05-08 Wed 15:30] = 1:00 CLOCK: [2013-05-06 Mon 14:55]--[2013-05-06 Mon 15:30] = 0:35 - State WAIT from TODO [2013-04-03 Wed 14:31] \\ sent mail - State TODO from DONE [2013-03-20 Wed 11:25] - State DONE from TODO [2012-11-22 Thu 15:05] CLOCK: [2012-11-22 Thu 14:40]--[2012-11-22 Thu 15:04] = 0:24 - State TODO from[2012-11-20 Tue 16:14] :END: - bla - some more bla Emacs : GNU Emacs 24.3.1 (i686-pc-linux-gnu, GTK+ Version 3.4.2) of 2014-01-03 on akhlut, modified by Debian Package: Org-mode version 8.2.4 (8.2.4-18-g4ee7e6-elpaplus @ /home/dfeich/.emacs.d/elpa/org-plus-contrib-20131230/) Best regards, Derek
Re: [O] Bug: property drawer created within other drawers
Hello, Derek Feichtinger dfe...@gmail.com writes: Dear developers Property drawers for certain items end up getting created within an already existing LOGBOOK drawer. The problem is that the first while loop in org-insert-property-drawer is also matching CLOCK lines within the drawer, so it reads into the drawer instead of stopping before it. I discovered a matching report that was already submitted by Sebastien Vauban (http://article.gmane.org/gmane.emacs.orgmode/78881). Problematic code in org.el: (defun org-insert-property-drawer () ;... (let ((indent (if org-adapt-indentation (- (match-end 0) (match-beginning 0)) 0)) (beg (point)) (re (concat ^[ \t]* org-keyword-time-regexp)) end hiddenp) (outline-next-heading) (setq end (point)) (goto-char beg) (while (re-search-forward re end t)) ; === problem I did a quick fix using the following construct: (let ((indent (if org-adapt-indentation (- (match-end 0) (match-beginning 0)) 0)) (beg (point)) (re (concat ^[ \t]* org-keyword-time-regexp)) end hiddenp) (outline-next-heading) (setq end (point)) (goto-char beg) (next-line) (while (looking-at re) (next-line)) (setq hiddenp (outline-invisible-p)) ; comment-out: (end-of-line 1) ; comment-out: (and (equal (char-after) ?\n) (forward-char 1)) Here's a typical task, where the original code will fail and place the property drawer just before the end of the LOGBOOK drawer. *** DONE some task CLOSED: [2013-07-10 Wed 14:11] DEADLINE: 2013-06-03 Mon SCHEDULED: 2013-07-08 Mon :LOGBOOK: - State DONE from WAIT [2013-07-10 Wed 14:11] CLOCK: [2013-05-17 Fri 17:07]--[2013-05-17 Fri 17:16] = 0:09 CLOCK: [2013-05-08 Wed 14:30]--[2013-05-08 Wed 15:30] = 1:00 CLOCK: [2013-05-06 Mon 14:55]--[2013-05-06 Mon 15:30] = 0:35 - State WAIT from TODO [2013-04-03 Wed 14:31] \\ sent mail - State TODO from DONE [2013-03-20 Wed 11:25] - State DONE from TODO [2012-11-22 Thu 15:05] CLOCK: [2012-11-22 Thu 14:40]--[2012-11-22 Thu 15:04] = 0:24 - State TODO from[2012-11-20 Tue 16:14] :END: - bla - some more bla Thanks for the report. It seems odd to skip so many lines in order to insert a property drawer. Couldn't we insert it right after the planning information (i.e. before LOGBOOK in the example)? Regards, -- Nicolas Goaziou