From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ilya Shlyakhter Subject: org-scan-tags Date: Tue, 14 Sep 2010 23:19:21 -0400 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Return-path: Received: from [140.186.70.92] (port=42101 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OviWr-0007d6-2n for emacs-orgmode@gnu.org; Tue, 14 Sep 2010 23:19:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OviWp-0008Dz-Jr for emacs-orgmode@gnu.org; Tue, 14 Sep 2010 23:19:24 -0400 Received: from mail-ww0-f41.google.com ([74.125.82.41]:64000) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OviWp-0008Dp-Fl for emacs-orgmode@gnu.org; Tue, 14 Sep 2010 23:19:23 -0400 Received: by wwb39 with SMTP id 39so506274wwb.0 for ; Tue, 14 Sep 2010 20:19:21 -0700 (PDT) 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 In org-scan-tags, if todo-only is t, would it be possible to speed things up by changingthe regexp go to just the lines with a TODO keyword? I.e. in (let* ((re (concat "^" outline-regexp " *\\(\\<\\(" (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") (org-re "\\>\\)\\)? *\\(.*?\\)\\(:[[:alnum:]_@:]+:\\)?[ \t]*$"))) remove the first "?" if todo-only is t. Also, regexp-opt might make a more efficient regexp than mapconcat with regexp-quote. Reason for request: I'm writing an extension of org for setting & checking goals, and want to quickly find entries with headlines of the form GOAL .... of which there may be relatively few in a large file. So, stepping through all entries and then checking them for the GOAL keyword is very inefficient. It would be much faster if the regexp included the GOAL as a keyword. It would be good if the parameter todo-only could be a list of strings, and org-scan-tags would return only the headlines where the todo keyword is from this list. It could use regexp-opt to make an efficient regexp for this. There also seem to be other opportunities for speeding up org-scan-tags in this way: e.g. if the match string includes +mytag, the regexp for the headline could include this as well. Similarly for properties. Maybe, org-make-tags-matcher could return a list of tags and properties that must appear in any matching entry. It would also help if the tags matcher expression could refer to text properties stored on the headline -- perhaps, with conditions such as :myprop=X (i.e. same as for org properties, but property name must be a keyword). It already does this for the 'org-category text property. Then one can e.g. mark entries representing unmet goals with text properties, and then use a regular org-tags-view to browse them in a sparsetree or an agenda. Thanks, ilya