diff --git a/README.org b/README.org index 2881ede..a2edf00 100644 --- a/README.org +++ b/README.org @@ -6,9 +6,9 @@ Here's an example of generating a kind of agenda view for today (note that the g #+BEGIN_SRC elisp (org-agenda-ng "~/src/emacs/org-super-agenda/test/test.org" - (and (or (date '= today) - (deadline '<=) - (scheduled '<= today)) + (and (or (date = today) + (deadline <=) + (scheduled <= today)) (not (done)))) #+END_SRC @@ -27,36 +27,19 @@ Here are some other examples: (org-agenda-ng "~/org/main.org" (or (habit) - (deadline '<=) - (scheduled '<= today) + (deadline <=) + (scheduled <= today) (and (todo "DONE" "CANCELLED") - (closed '= today)))) + (closed = today)))) (org-agenda-ng "~/org/main.org" (or (habit) - (and (or (date '= today) - (deadline '<=) - (scheduled '<= today)) + (and (or (date = today) + (deadline <=) + (scheduled <= today)) (not (done))) (and (todo "DONE" "CANCELLED") - (closed '= today)))) - - (org-agenda-ng "~/org/main.org" - (or (habit) - (and (or (date '= today) - (deadline '<=) - (scheduled '<= today)) - (not (done))) - (and (todo "DONE" "CANCELLED") - (closed '= today)))) - (org-agenda-ng "~/org/main.org" - (or (habit) - (and (or (date '= today) - (deadline '<=) - (scheduled '<= today)) - (not (done))) - (and (todo "DONE" "CANCELLED") - (closed '= today)))) + (closed = today)))) #+END_SRC ** org-ql diff --git a/org-agenda-ng.el b/org-agenda-ng.el index 745d7a9..49ea752 100644 --- a/org-agenda-ng.el +++ b/org-agenda-ng.el @@ -47,12 +47,19 @@ (symbol-function ,target))) ,@body)) +;; FIXME: DRY these two macros. + (cl-defmacro org-agenda-ng (files pred-body) "Display an agenda-like buffer of entries in FILES that match PRED-BODY." (declare (indent defun)) `(org-agenda-ng--agenda ,files (byte-compile (lambda () - ,pred-body)) + (cl-symbol-macrolet ((= #'=) + (< #'<) + (> #'>) + (<= #'<=) + (>= #'>=)) + ,pred-body))) #'org-agenda-ng--format-element)) (cl-defmacro org-ql (files pred-body &key (action-fn (lambda (element) (list element)))) @@ -63,7 +70,12 @@ of calling `org-element-headline-parser' at each matching entry." (declare (indent defun)) `(org-ql--query ,files (byte-compile (lambda () - ,pred-body)) + (cl-symbol-macrolet ((= #'=) + (< #'<) + (> #'>) + (<= #'<=) + (>= #'>=)) + ,pred-body))) #',action-fn))