Function: org-diary-sexp-entry

org-diary-sexp-entry is a byte-compiled function defined in org.el.gz.

Signature

(org-diary-sexp-entry SEXP ENTRY D)

Documentation

Process a SEXP diary ENTRY for date D.

Source Code

;; Defined in /usr/src/emacs/lisp/org/org.el.gz
(defun org-diary-sexp-entry (sexp entry d)
  "Process a SEXP diary ENTRY for date D."
  (require 'diary-lib)
  ;; `org-anniversary' and alike expect ENTRY and DATE to be bound
  ;; dynamically.
  (let ((cached (gethash (list sexp entry d) org--diary-sexp-entry-cache 'none)))
    (if (not (eq 'none cached)) cached
      (puthash (list sexp entry d)
               (let* ((sexp `(let ((entry ,entry)
                                   (date ',d))
                               ,(car (read-from-string sexp))))
                      ;; FIXME: Do not use (eval ... t) in the following sexp as
                      ;; diary vars are still using dynamic scope.
                      (result (if calendar-debug-sexp (eval sexp)
                                (condition-case nil
                                    (eval sexp)
                                  (error
                                   (beep)
                                   (message "Bad sexp at line %d in %s: %s"
                                            (org-current-line)
                                            (buffer-file-name) sexp)
                                   (sleep-for 2))))))
                 (cond ((stringp result) (split-string result "; "))
                       ((and (consp result)
                             (not (consp (cdr result)))
                             (stringp (cdr result)))
                        (cdr result))
                       ((and (consp result)
                             (stringp (car result)))
                        result)
                       (result entry)))
               org--diary-sexp-entry-cache))))