summaryrefslogtreecommitdiff
path: root/lisp/ss-agenda.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/ss-agenda.el')
-rw-r--r--lisp/ss-agenda.el40
1 files changed, 40 insertions, 0 deletions
diff --git a/lisp/ss-agenda.el b/lisp/ss-agenda.el
new file mode 100644
index 0000000..a89a52e
--- /dev/null
+++ b/lisp/ss-agenda.el
@@ -0,0 +1,40 @@
+;;; ss-agenda.el --- Agenda configuration -*- lexical-binding: t; -*-
+
+;;; Commentary:
+
+;; Agenda discovery and agenda commands.
+
+;;; Code:
+
+(require 'ss-core)
+(require 'ss-org)
+
+(defun ss-refresh-org-agenda-files (&rest _)
+ "Refresh `org-agenda-files' from the journal and PARA directories.
+Ignore any arguments passed by advice wrappers."
+ (require 'org-agenda)
+ (setq org-agenda-files
+ (sort
+ (delete-dups
+ (append
+ (list (ss-require-existing-file ss-journal-file))
+ (apply #'append
+ (mapcar (lambda (directory)
+ (directory-files-recursively
+ (ss-require-existing-directory directory)
+ "\\.org\\'"))
+ ss-org-agenda-directories))))
+ #'string<)))
+
+(defun ss-open-agenda ()
+ "Refresh agenda files and invoke `org-agenda'."
+ (interactive)
+ (call-interactively #'org-agenda))
+
+(defun ss-agenda-setup ()
+ "Initialize agenda behavior."
+ (advice-add 'org-agenda :before #'ss-refresh-org-agenda-files))
+
+(provide 'ss-agenda)
+
+;;; ss-agenda.el ends here