From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Davison Subject: [PATCH] Allow property retrieval before first heading? Date: Sat, 12 Feb 2011 16:26:23 +0000 Message-ID: Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from [140.186.70.92] (port=48773 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PoIJ4-0007Z3-9H for emacs-orgmode@gnu.org; Sat, 12 Feb 2011 11:26:48 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PoIJ1-0006KL-1J for emacs-orgmode@gnu.org; Sat, 12 Feb 2011 11:26:44 -0500 Received: from lo.gmane.org ([80.91.229.12]:58270) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PoIJ0-0006HO-EP for emacs-orgmode@gnu.org; Sat, 12 Feb 2011 11:26:42 -0500 Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1PoIIu-0008Bv-UP for emacs-orgmode@gnu.org; Sat, 12 Feb 2011 17:26:36 +0100 Received: from 94.197.159.103.threembb.co.uk ([94.197.159.103]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 12 Feb 2011 17:26:36 +0100 Received: from dandavison7 by 94.197.159.103.threembb.co.uk with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 12 Feb 2011 17:26:36 +0100 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org Currently (org-entry-get) throws an error if point is before the first heading. Is there a reason that this must be so? Org is too essential for headings to be obligatory! An example of when it would be useful to get properties is in a buffer containing src blocks but no headings (babel takes header args from Org properties). I make heavy use of such buffers as a scratch pad. I'm not sure to what extent speed is essential in these functions, and therefore unsure whether the calls to `org-before-first-heading-p' are acceptable. Dan Allow properties to be retrieved before first heading in file. * lisp/org.el (org-entry-get): Don't look for a property drawer if we are before the first heading in the file. (org-entry-get-with-inheritance): Don't attempt to move up the tree if we are before the first heading in the file. Also, enclose less of the function in the save-excursion. diff --git a/lisp/org.el b/lisp/org.el index 0104007..a676ec4 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -13567,7 +13567,8 @@ when a \"nil\" value can supersede a non-nil value higher up the hierarchy." ;; We need a special property. Use `org-entry-properties' to ;; retrieve it, but specify the wanted property (cdr (assoc property (org-entry-properties nil 'special property))) - (let ((range (org-get-property-block))) + (let ((range (unless (org-before-first-heading-p) + (org-get-property-block)))) (if (and range (goto-char (car range)) (re-search-forward @@ -13680,6 +13681,7 @@ should be considered as undefined (this is the meaning of nil here). However, if LITERAL-NIL is set, return the string value \"nil\" instead." (move-marker org-entry-property-inherited-from nil) (let (tmp) + (unless (org-before-first-heading-p) (save-excursion (save-restriction (widen) @@ -13690,11 +13692,12 @@ However, if LITERAL-NIL is set, return the string value \"nil\" instead." (move-marker org-entry-property-inherited-from (point)) (throw 'ex tmp)) (or (org-up-heading-safe) (throw 'ex nil))))) + )) (setq tmp (or tmp (cdr (assoc property org-file-properties)) (cdr (assoc property org-global-properties)) (cdr (assoc property org-global-properties-fixed)))) - (if literal-nil tmp (org-not-nil tmp))))) + (if literal-nil tmp (org-not-nil tmp)))) (defvar org-property-changed-functions nil "Hook called when the value of a property has changed.