diff options
| author | Craig Jennings <c@cjennings.net> | 2024-04-07 13:41:34 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2024-04-07 13:41:34 -0500 |
| commit | 754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 (patch) | |
| tree | f1190704f78f04a2b0b4c977d20fe96a828377f1 /modules/org-refile-config.el | |
new repository
Diffstat (limited to 'modules/org-refile-config.el')
| -rw-r--r-- | modules/org-refile-config.el | 62 |
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. |
