summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--config/init-notes.el20
1 files changed, 18 insertions, 2 deletions
diff --git a/config/init-notes.el b/config/init-notes.el
index b00626a..277b156 100644
--- a/config/init-notes.el
+++ b/config/init-notes.el
@@ -48,6 +48,20 @@
   (org-mode . visual-line-mode)
   (org-mode . org-indent-mode)
 
+  :preface
+  (defun my/org-entry-get-immediate (property)
+    (save-excursion
+      (let ((local (org--property-local-values property nil)))
+        (and local (mapconcat #'identity
+                              (delq nil local)
+                              (org--property-get-separator property))))))
+
+  (defun org-refile-heading-p ()
+    (let ((todo-state (org-get-todo-state)))
+      (if todo-state
+          (string= todo-state "PROJECT")
+        (my/org-entry-get-immediate "CATEGORY"))))
+
   :custom
   (org-directory "~/Documents/notes")
   (org-default-notes-file (expand-file-name "tasks.org" org-directory))
@@ -64,15 +78,17 @@
   ;; quick access for todo states
   (org-todo-keywords
    '((sequence "TODO(t)" "NEXT(n)" "WAITING(w!)" "|" "DONE(d)")
+     (sequence "PROJECT(p@/!)" "|" "COMPLETE(d@/!)" "ABORTED(x@/!)")
      (sequence "|" "CANCELLED(c)")))
 
   (org-log-done 'time)
   (org-log-into-drawer t)
 
   ;; org-refile options
+  (org-refile-target-verify-function 'org-refile-heading-p)
+  (org-refile-targets
+   '((org-agenda-files :maxlevel . 4)))
   (org-refile-allow-creating-parent-nodes (quote confirm))
-  (org-refile-targets '(("tasks.org" :tag . "project")))
-  (org-refile-use-outline-path 'file)
 
   (org-hide-emphasis-markers t)
   (org-hide-leading-stars t)