From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bernt Hansen Subject: Re: Exclude all TODO keywords from refile targets Date: Sat, 24 Nov 2012 02:22:47 -0500 Message-ID: <87txsfsbw8.fsf@norang.ca> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from eggs.gnu.org ([208.118.235.92]:52088) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TcA4i-0008En-0E for emacs-orgmode@gnu.org; Sat, 24 Nov 2012 02:22:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TcA4g-0007My-OA for emacs-orgmode@gnu.org; Sat, 24 Nov 2012 02:22:51 -0500 Received: from mho-04-ewr.mailhop.org ([204.13.248.74]:12779 helo=mho-02-ewr.mailhop.org) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TcA4g-0007Mp-Kd for emacs-orgmode@gnu.org; Sat, 24 Nov 2012 02:22:50 -0500 In-Reply-To: (Jason Dunsmore's message of "Thu, 15 Nov 2012 10:15:45 -0600") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Jason Dunsmore Cc: emacs-orgmode@gnu.org Jason Dunsmore writes: > I found a bit of code to exclude DONE keywords from refile targets > here: http://orgmode.org/worg/org-hacks.html#sec-2-3 > > Since I try to keep all headings with keywords as end nodes, I wanted > to exclude all TODO (and DONE) keywords. However, the member function > doesn't work on a sequence data type, so I couldn't use > org-todo-keywords the same way the org-hacks code used > org-done-keywords. Furthermore, org-todo-keywords contains extraneous > characters in parenthesis that define "selection characters". I ended > up creating a new variable, org-todo-keywords-list, and converting the > data from org-todo-keywords into a similar format as > org-done-keywords. > > Perhaps a org-todo-keywords-list variable would be a useful addition > to org-mode. Here's the code I'm using: > > (setq org-todo-keywords '((sequence "TODO(t)" "DELEGATE(l)" > "STARTED(s@)" "WAITING(w@)" "|" "DONE(d)" "CANCELLED(c)" > "DELEGATED(e@)" "POSTPONED(p@)"))) > You should be able to use org-todo-keywords-1 which contains a list of todo keywords for the current org file. HTH, Bernt > ;; define a new variable > (defvar org-todo-keywords-list nil > "A list version of org-todo-keywords, without the selection characters > in parenthesis.") > > ;; create org-todo-keywords-list from org-todo-keywords-list, using a > ;; similar format to org-done-keywords > (dolist (keyword (first org-todo-keywords)) > (when (and (stringp keyword) > (not (equal keyword "|"))) > (add-to-list 'org-todo-keywords-list > (replace-regexp-in-string "(.*)" "" keyword)))) > > (defun jbd-verify-refile-target () > "Exclude todo keywords with a done state from refile targets" > (not (member (nth 2 (org-heading-components)) org-todo-keywords-list))) > > (setq org-refile-target-verify-function 'jbd-verify-refile-target)