summaryrefslogtreecommitdiff
path: root/modules/org-refile-config.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
committerCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
commit754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 (patch)
treef1190704f78f04a2b0b4c977d20fe96a828377f1 /modules/org-refile-config.el
new repository
Diffstat (limited to 'modules/org-refile-config.el')
-rw-r--r--modules/org-refile-config.el62
1 files changed, 62 insertions, 0 deletions
diff --git a/modules/org-refile-config.el b/modules/org-refile-config.el
new file mode 100644
index 00000000..8c058d66
--- /dev/null
+++ b/modules/org-refile-config.el
@@ -0,0 +1,62 @@
+;;; org-refile-config.el --- Org Refile Customizations -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;;
+
+;;; Code:
+
+(with-eval-after-load 'org-roam-config
+ (require 'org-refile)
+
+ ;; ----------------------------- Org Refile Targets ----------------------------
+ ;; sets refile targets
+ ;; - adds project files in org-roam to the refile targets
+ ;; - adds todo.org files in subdirectories of the code and project directories
+
+ (defun cj/add-files-to-org-refile-targets (directory)
+ "Recursively searches for all files named 'todo.org' in DIRECTORY and adds them to org-project-files."
+ (interactive "D")
+ (let ((files (directory-files-recursively directory "^[Tt][Oo][Dd][Oo]\\.[Oo][Rr][Gg]$" t)))
+ (dolist (file files)
+ (add-to-list 'org-refile-targets `(,file . (:level . 1))))))
+
+ (defun cj/build-org-refile-targets()
+ "Build org-refile-targets.
+Starts with the schedule file, then adds the Emacs task list,
+and any task list in the code or projects directories."
+ (interactive)
+ (let ((new-files
+ (append
+ (cj/org-roam-list-notes-by-tag "Project")
+ (cj/org-roam-list-notes-by-tag "Topic"))))
+ (dolist (file new-files)
+ (unless (member file org-agenda-files)
+ (setq org-agenda-files (cons file org-agenda-files))))
+ )
+ (setq org-refile-targets '((org-agenda-files :maxlevel . 1)))
+ (cj/add-files-to-org-refile-targets user-emacs-directory)
+ (cj/add-files-to-org-refile-targets code-dir)
+ (cj/add-files-to-org-refile-targets projects-dir))
+
+ ;; --------------------------------- Org-Refile -------------------------------
+ ;; convenience function for scoping the refile candidates to the current buffer.
+
+ (defun cj/org-refile-in-file ()
+ "Refile to a target within the current file and save the buffer."
+ (interactive)
+ (let ((org-refile-targets `(((,(buffer-file-name)) :maxlevel . 6))))
+ (call-interactively 'org-refile)
+ (save-buffer)))
+
+ ;; ----------------------- Save Org Files After Refile -----------------------
+ ;; advice that saves all open org buffers after a refile is complete
+
+ (advice-add 'org-refile :after
+ (lambda (&rest _)
+ (org-save-all-org-buffers)))
+
+
+ ) ;; end with eval-after-load 'org-roam
+
+(provide 'org-refile-config)
+;;; org-refile-config.el ends here.