buffer-match-p: Resolve backward compat concerns
* doc/lispref/buffers.texi (Buffer List): Document 'major-mode' and 'derived-mode' predicates. Fix some typos. * lisp/subr.el (buffer-match-p): Use the structure initially pioneered by project-kill-buffer-conditions as-is (bug#54296). * lisp/progmodes/project.el (project-kill-buffer-conditions) (project--buffer-check): Revert the latest change. (project--buffer-check): Add support for lambda predicates.
This commit is contained in:
parent
5e567af8e0
commit
4aca0d818f
3 changed files with 33 additions and 31 deletions
|
@ -981,13 +981,18 @@ of
|
|||
Satisfied if @var{expr} doesn't satisfy @code{buffer-match-p} with
|
||||
the same buffer and @code{arg}.
|
||||
@item or
|
||||
Satisfied if @var{oper} is a list and @emph{any} condition if
|
||||
Satisfied if @var{expr} is a list and @emph{any} condition in
|
||||
@var{expr} satisfies @code{buffer-match-p}, with the same buffer and
|
||||
@code{arg}.
|
||||
@item and
|
||||
Satisfied if @var{oper} is a list and @emph{all} condition if
|
||||
@var{expr} satisfies @code{buffer-match-p}, with the same buffer and
|
||||
Satisfied if @var{expr} is a list and @emph{all} conditions in
|
||||
@var{expr} satisfy @code{buffer-match-p}, with the same buffer and
|
||||
@code{arg}.
|
||||
@item derived-mode
|
||||
Satisfied if the buffer's major mode derives from @var{expr}.
|
||||
@item major-mode
|
||||
Satisfied if the buffer's major mode is equal to @var{expr}. Prefer
|
||||
using @code{derived-mode} instead when both can work.
|
||||
@end table
|
||||
@end itemize
|
||||
@end defun
|
||||
|
|
|
@ -1221,22 +1221,18 @@ displayed."
|
|||
(display-buffer-other-frame buffer-or-name))
|
||||
|
||||
(defcustom project-kill-buffer-conditions
|
||||
`(buffer-file-name ; All file-visiting buffers are included.
|
||||
'(buffer-file-name ; All file-visiting buffers are included.
|
||||
;; Most of the temp buffers in the background:
|
||||
,(lambda (buf)
|
||||
(not (eq (buffer-local-value 'major-mode buf)
|
||||
'fundamental-mode)))
|
||||
(major-mode . fundamental-mode)
|
||||
;; non-text buffer such as xref, occur, vc, log, ...
|
||||
(and (major-mode . special-mode)
|
||||
,(lambda (buf)
|
||||
(not (eq (buffer-local-value 'major-mode buf)
|
||||
'help-mode))))
|
||||
(major-mode . compilation-mode)
|
||||
(major-mode . dired-mode)
|
||||
(major-mode . diff-mode)
|
||||
(major-mode . comint-mode)
|
||||
(major-mode . eshell-mode)
|
||||
(major-mode . change-log-mode))
|
||||
(and (derived-mode . special-mode)
|
||||
(not (major-mode . help-mode)))
|
||||
(derived-mode . compilation-mode)
|
||||
(derived-mode . dired-mode)
|
||||
(derived-mode . diff-mode)
|
||||
(derived-mode . comint-mode)
|
||||
(derived-mode . eshell-mode)
|
||||
(derived-mode . change-log-mode))
|
||||
"List of conditions to kill buffers related to a project.
|
||||
This list is used by `project-kill-buffers'.
|
||||
Each condition is either:
|
||||
|
@ -1246,11 +1242,9 @@ Each condition is either:
|
|||
- a cons-cell, where the car describes how to interpret the cdr.
|
||||
The car can be one of the following:
|
||||
* `major-mode': the buffer is killed if the buffer's major
|
||||
mode is derived from the major mode denoted by the cons-cell's
|
||||
cdr.
|
||||
mode is eq to the cons-cell's cdr.
|
||||
* `derived-mode': the buffer is killed if the buffer's major
|
||||
mode is eq to the cons-cell's cdr (this is deprecated and will
|
||||
result in a warning if used).
|
||||
mode is derived from the major mode in the cons-cell's cdr.
|
||||
* `not': the cdr is interpreted as a negation of a condition.
|
||||
* `and': the cdr is a list of recursive conditions, that all have
|
||||
to be met.
|
||||
|
@ -1308,15 +1302,12 @@ form of CONDITIONS."
|
|||
(when (cond
|
||||
((stringp c)
|
||||
(string-match-p c (buffer-name buf)))
|
||||
((symbolp c)
|
||||
((functionp c)
|
||||
(funcall c buf))
|
||||
((eq (car-safe c) 'derived-mode)
|
||||
(warn "The use of `derived-mode' in \
|
||||
`project--buffer-check' is deprecated.")
|
||||
(provided-mode-derived-p
|
||||
(buffer-local-value 'major-mode buf)
|
||||
(cdr c)))
|
||||
((eq (car-safe c) 'major-mode)
|
||||
(eq (buffer-local-value 'major-mode buf)
|
||||
(cdr c)))
|
||||
((eq (car-safe c) 'derived-mode)
|
||||
(provided-mode-derived-p
|
||||
(buffer-local-value 'major-mode buf)
|
||||
(cdr c)))
|
||||
|
|
12
lisp/subr.el
12
lisp/subr.el
|
@ -6855,9 +6855,11 @@ CONDITION is either:
|
|||
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:
|
||||
* `major-mode': the buffer matches if the buffer's major
|
||||
mode is derived from the major mode denoted by the cons-cell's
|
||||
cdr
|
||||
* `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 cdr is interpreted as a negation of a condition.
|
||||
* `and': the cdr is a list of recursive conditions, that all have
|
||||
to be met.
|
||||
|
@ -6877,6 +6879,10 @@ CONDITION is either:
|
|||
(funcall condition buffer)
|
||||
(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)))
|
||||
|
|
Loading…
Add table
Reference in a new issue