diff --git a/elfeed-export.el b/elfeed-export.el index d748ddf..27591f6 100644 --- a/elfeed-export.el +++ b/elfeed-export.el @@ -39,28 +39,37 @@ ;;; Code: (defcustom elfeed-export-fields - '(title date url tags feed-title feed content) - "Which fields to export per entry." + '((title . elfeed-entry-title) + (date . elfeed-export--entry-date) + (url . elfeed-entry-link) + (tags . elfeed-entry-tags) + (feed-title . elfeed-export--feed-title) + (feed . elfeed-export--entry-feed) + (content . elfeed-export--entry-content)) + "Which fields to export per entry and a function to obtain the value. + +The function takes an entry argument for extracting the desired value." + :type 'alist :group 'elfeed-export) +(defun elfeed-export--entry-date (entry) + (format-time-string "%F %T" (elfeed-entry-date entry))) + +(defun elfeed-export--feed-title (entry) + (elfeed-feed-title (elfeed-entry-feed entry))) + +(defun elfeed-export--entry-feed (entry) + (elfeed-feed-url (elfeed-entry-feed entry))) + +(defun elfeed-export--entry-content (entry) + (elfeed-deref (elfeed-entry-content entry))) + (defun elfeed-export--entry-to-alist (entry) - (let ((feed (elfeed-entry-feed entry))) - (remove nil - (list - (when (memq 'title elfeed-export-fields) - (cons "title" (elfeed-entry-title entry))) - (when (memq 'date elfeed-export-fields) - (cons "date" (format-time-string "%F %T" (elfeed-entry-date entry)))) - (when (memq 'url elfeed-export-fields) - (cons "url" (elfeed-entry-link entry))) - (when (memq 'tags elfeed-export-fields) - (cons "tags" (elfeed-entry-tags entry))) - (when (memq 'feed-title elfeed-export-fields) - (cons "feed-title" (elfeed-feed-title feed))) - (when (memq 'feed elfeed-export-fields) - (cons "feed" (elfeed-feed-url feed))) - (when (memq 'content elfeed-export-fields) - (cons "content" (elfeed-deref (elfeed-entry-content entry)))))))) + (remove nil + (mapcar (lambda (field) + (cons (symbol-name (car field)) + (funcall (cdr field) entry))) + elfeed-export-fields))) (defun elfeed-export--entries () (let ((entries) @@ -69,11 +78,10 @@ (setq entries (append entries (elfeed-feed-entries feed)))) - entries)) + (mapcar #'elfeed-export--entry-to-alist entries))) (defun elfeed-export-to-json () - (json-encode - (mapcar #'elfeed-export--entry-to-alist (elfeed-export--entries)))) + (json-encode (elfeed-export--entries))) (defun elfeed-export-to-file (path) (interactive "F")