 See `elfeed-search-set-filter' for format/syntax documentation.
 This function must *only* be called within the body of
 `with-elfeed-db-visit' because it may perform a non-local exit."
-  (cl-destructuring-bind
-      (after must-have must-not-have matches not-matches limit) filter
+  (let ((after (plist-get filter :after))
+        (must-have (plist-get filter :must-have))
+        (must-not-have (plist-get filter :must-not-have))
+        (matches (plist-get filter :matches))
+        (not-matches (plist-get filter :not-matches))
+        (limit (plist-get filter :limit)))
     (let* ((tags (elfeed-entry-tags entry))
            (date (elfeed-entry-date entry))
            (age (- (float-time) date))

      (insert "(" tags-str ")"))))

(defun elfeed-search-parse-filter (filter)
  "Parse the elements of a search filter."
  (let ((must-have ())
        (must-not-have ())
        (after nil)

        (push (format "#%d" limit) output))
      (mapconcat #'identity (nreverse output) " "))))

  (defun elfeed-search-filter (filter entry feed &optional count)
  "Return non-nil if ENTRY and FEED pass FILTER.

COUNT is the total number of entries collected so far, for
