Augusto Stoffel writes: > This buffer-match-p condition does the expected job: > > (buffer-match-p '(or "\\*" (derived-mode . special-mode)) > (current-buffer)) > > But this presumably equivalent one gives a “(wrong-type-argument listp > special-mode)” error: > > (buffer-match-p '(or (and "\\*") > (derived-mode . special-mode)) > (current-buffer)) It seems to me that the issue is related to the `and' being wrapped by an `or', specifically because of a typo in the handling of `and':