emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [PATCH] Recognize property blocks even after text
@ 2015-02-12  1:39 Sacha Chua
  2015-02-12 10:12 ` Rasmus
  0 siblings, 1 reply; 4+ messages in thread
From: Sacha Chua @ 2015-02-12  1:39 UTC (permalink / raw)
  To: emacs-orgmode

Hi! I noticed that the refactored org-get-property-block no longer
allows for any text (aside from the SCHEDULED / DEADLINE / CLOSED) text
between the heading and the property drawer, which gave me problems when
I accidentally added text or timestamps or things like that. Also, it
means org-gcal's default format (which puts the timestamp before the
property drawer) doesn't work, so maybe a bunch of other things rely on
the old behavior. If that part of the change was unintentional, would
you consider the patch below? It seems to be okay with my Org files, but
maybe that flexibility was removed for performance reasons. Hope this is
useful!


Subject: [PATCH] Recognize property blocks even after text

* lisp/org.el (org-get-property-block): Search for the property drawer
anywhere before the next heading or the end of the buffer.

* testing/lisp/test-org.el (test-org/property-blocks-are-flexible):
Check if property blocks can be defined after text.
---
 lisp/org.el              | 25 +++++++++++++++----------
 testing/lisp/test-org.el | 17 +++++++++++++++++
 2 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/lisp/org.el b/lisp/org.el
index 64b546f..dac7390 100755
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -15422,16 +15422,21 @@ return nil."
 		      (t (org-with-limited-levels (org-back-to-heading t))))))
        (forward-line)
        (when (org-looking-at-p org-planning-line-re) (forward-line))
-       (cond ((looking-at org-property-drawer-re)
-	      (forward-line)
-	      (cons (point) (progn (goto-char (match-end 0))
-				   (line-beginning-position))))
-	     (force
-	      (goto-char beg)
-	      (org-insert-property-drawer)
-	      (let ((pos (save-excursion (search-forward ":END:")
-					 (line-beginning-position))))
-		(cons pos pos))))))))
+       (cond ((re-search-forward
+               org-property-drawer-re
+               (save-excursion (save-match-data (outline-next-heading))
+                               (point)) t)
+              (progn
+                (goto-char (match-beginning 0))
+                (forward-line)
+                (cons (point) (progn (goto-char (match-end 0))
+                                     (line-beginning-position)))))
+             (force
+              (goto-char beg)
+              (org-insert-property-drawer)
+              (let ((pos (save-excursion (search-forward ":END:")
+                                         (line-beginning-position))))
+                (cons pos pos))))))))
 
 (defun org-at-property-p ()
   "Non-nil when point is inside a property drawer.
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index ce1d519..800cffc 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -2618,6 +2618,23 @@ Text.
 	      "* H\n:PROPERTIES:\n:COLUMNS: %25ITEM %A %20B\n:END:"
 	    (org-buffer-property-keys nil nil t)))))
 
+(ert-deftest test-org/property-blocks-are-flexible ()
+  "Test if properties can be specified with some information before them."
+  ;; Retrieve properties accross siblings.
+  (should
+   (equal '("A" "B")
+	  (org-test-with-temp-text "
+* H1
+Some text goes here.
+:PROPERTIES:
+:A: 1
+:END:
+* H2
+:PROPERTIES:
+:B: 1
+:END:"
+	    (org-buffer-property-keys)))))
+
 (ert-deftest test-org/property-values ()
   "Test `org-property-values' specifications."
   ;; Regular test.
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-02-17 20:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-12  1:39 [PATCH] Recognize property blocks even after text Sacha Chua
2015-02-12 10:12 ` Rasmus
2015-02-13 17:49   ` Sacha Chua
2015-02-17 20:59     ` Rasmus

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).