Jason Dunsmore <jasondunsm...@gmail.com> 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)