Function: buffer-match-p
buffer-match-p is a byte-compiled function defined in compat-29.el.
Signature
(buffer-match-p CONDITION BUFFER-OR-NAME &optional ARG)
Documentation
[Compatibility function for buffer-match-p, defined in Emacs 29.1. See
(compat) Emacs 29.1' for more details.]
Return non-nil if BUFFER-OR-NAME matches CONDITION. CONDITION is either: - the
symbol t, to always match, - the symbol nil, which never matches, - a regular
expression, to match a buffer name, - a predicate function that takes a buffer
object and ARG as arguments, and returns non-nil if the buffer matches, - a
cons-cell, where the car describes how to interpret the cdr. The car can be one
of the following: * derived-mode: the buffer matches if the buffer's major
mode is derived from the major mode in the cons-cell's cdr. * major-mode: the
buffer matches if the buffer's major mode is eq to the cons-cell's cdr. Prefer
using derived-mode instead when both can work. * not: the cadr is
interpreted as a negation of a condition. * and: the cdr is a list of
recursive conditions, that all have to be met. * or: the cdr is a list of
recursive condition, of which at least one has to be met.
Source Code
;; Defined in ~/.emacs.d/elpa/compat-30.1.0.1/compat-29.el
(compat-defun buffer-match-p (condition buffer-or-name &optional arg) ;; <compat-tests:buffer-match-p>
"Return non-nil if BUFFER-OR-NAME matches CONDITION.
CONDITION is either:
- the symbol t, to always match,
- the symbol nil, which never matches,
- a regular expression, to match a buffer name,
- a predicate function that takes a buffer object and ARG as
arguments, and returns non-nil if the buffer matches,
- a cons-cell, where the car describes how to interpret the cdr.
The car can be one of the following:
* `derived-mode': the buffer matches if the buffer's major mode
is derived from the major mode in the cons-cell's cdr.
* `major-mode': the buffer matches if the buffer's major mode
is eq to the cons-cell's cdr. Prefer using `derived-mode'
instead when both can work.
* `not': the cadr is interpreted as a negation of a condition.
* `and': the cdr is a list of recursive conditions, that all have
to be met.
* `or': the cdr is a list of recursive condition, of which at
least one has to be met."
(letrec
((buffer (get-buffer buffer-or-name))
(match
(lambda (conditions)
(catch 'match
(dolist (condition conditions)
(when (cond
((eq condition t))
((stringp condition)
(string-match-p condition (buffer-name buffer)))
((functionp condition)
(condition-case nil
(funcall condition buffer)
(wrong-number-of-arguments
(funcall condition buffer arg))))
((eq (car-safe condition) 'major-mode)
(eq
(buffer-local-value 'major-mode buffer)
(cdr condition)))
((eq (car-safe condition) 'derived-mode)
(provided-mode-derived-p
(buffer-local-value 'major-mode buffer)
(cdr condition)))
((eq (car-safe condition) 'not)
(not (funcall match (cdr condition))))
((eq (car-safe condition) 'or)
(funcall match (cdr condition)))
((eq (car-safe condition) 'and)
(catch 'fail
(dolist (c (cdr condition))
(unless (funcall match (list c))
(throw 'fail nil)))
t)))
(throw 'match t)))))))
(funcall match (list condition))))