From: Joseph Turner via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: "Dmitry Gutov" <dmitry@gutov.dev>,
"Philip Kaludercic" <philipk@posteo.net>,
"Eli Zaretskii" <eliz@gnu.org>,
"Mattias Engdegård" <mattias.engdegard@gmail.com>,
65797@debbugs.gnu.org
Subject: bug#65797: `buffer-match-p` should not use `func-arity`
Date: Wed, 11 Oct 2023 21:53:31 -0700 [thread overview]
Message-ID: <87v8bcqvr0.fsf@breatheoutbreathe.in> (raw)
In-Reply-To: <jwvcyxnpjct.fsf-monnier+emacs@gnu.org>
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> I am in favor of this solution as well.
>
> Then how 'bout something like the patch below which changes the
> `&optional` into an `&rest` but tries to preserve compatibility with the
> old calling convention.
>
>
> Stefan
>
>
> diff --git a/lisp/subr.el b/lisp/subr.el
> index e88815fa58c..06c9923b525 100644
> --- a/lisp/subr.el
> +++ b/lisp/subr.el
> @@ -7295,13 +7292,13 @@ string-lines
> (setq start (length string)))))
> (nreverse lines))))
>
> -(defun buffer-match-p (condition buffer-or-name &optional arg)
> +(defun buffer-match-p (condition buffer-or-name &rest args)
> "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 BUFFER-OR-NAME and ARG as
> +- a predicate function that takes BUFFER-OR-NAME plus ARGS 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:
> @@ -7326,9 +7323,18 @@ buffer-match-p
> ((pred stringp)
> (string-match-p condition (buffer-name buffer)))
> ((pred functionp)
> - (if (eq 1 (cdr (func-arity condition)))
> - (funcall condition buffer-or-name)
> - (funcall condition buffer-or-name arg)))
> + (if (cdr args)
> + ;; More than 1 argument: no need for
> + ;; Emacs-29 backward compatibility!
> + (apply condition buffer-or-name args)
> + (condition-case err
> + (apply condition buffer-or-name args)
> + (wrong-number-of-arguments
> + ;; Backward compatibility with Emacs-29 semantics.
> + (message "Trying obsolete calling convention for: %S"
> + Condition)
> + (apply condition buffer-or-name
> + (if args '(nil) nil))))))
> (`(major-mode . ,mode)
> (eq
> (buffer-local-value 'major-mode buffer)
> @@ -7350,17 +7356,17 @@ buffer-match-p
> (throw 'match t)))))))
> (funcall match (list condition))))
At first, I was concerned that the condition-case would mess up error
handling in user code, but all 9 permutations give the expected results:
(let ((condition
(lambda (buf) t)
;; (lambda (buf arg1) t)
;; (lambda (buf arg1 arg2) t)
))
(condition-case err
(buffer-match-p condition (current-buffer)
;; 'arg1
;; 'arg2
)
(wrong-number-of-arguments
"Caught")))
> -(defun match-buffers (condition &optional buffers arg)
> +(defun match-buffers (condition &optional buffers &rest args)
> "Return a list of buffers that match CONDITION, or nil if none match.
> See `buffer-match-p' for various supported CONDITIONs.
> By default all buffers are checked, but the optional
> argument BUFFERS can restrict that: its value should be
> an explicit list of buffers to check.
> -Optional argument ARG is passed to `buffer-match-p', for
> +Optional arguments ARGS are passed to `buffer-match-p', for
> predicate conditions in CONDITION."
> (let (bufs)
> (dolist (buf (or buffers (buffer-list)))
> - (when (buffer-match-p condition (get-buffer buf) arg)
> + (when (apply #'buffer-match-p condition (get-buffer buf) args)
> (push buf bufs)))
> bufs))
>
next prev parent reply other threads:[~2023-10-12 4:53 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-07 7:53 bug#65797: 29.0.92; func-arity should not return (0 . many) with apply-partially Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-07 12:35 ` Mattias Engdegård
2023-09-07 15:11 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-07 15:17 ` Mattias Engdegård
2023-09-07 13:43 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-07 15:50 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-08 4:40 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-08 6:46 ` Eli Zaretskii
2023-09-08 15:52 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-08 16:37 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-08 17:18 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-08 18:16 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-08 18:20 ` Eli Zaretskii
2023-09-11 16:57 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-11 18:58 ` Eli Zaretskii
2023-09-12 18:30 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-08 17:01 ` bug#65797: `buffer-match-p` should not use `func-arity` Philip Kaludercic
2023-09-12 18:28 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-13 21:50 ` Philip Kaludercic
2023-09-14 13:47 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-18 9:12 ` Philip Kaludercic
2023-09-18 11:55 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-18 17:23 ` Philip Kaludercic
2023-09-18 18:05 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-19 8:34 ` Philip Kaludercic
2023-09-19 10:06 ` Dmitry Gutov
2023-09-19 13:56 ` Philip Kaludercic
2023-09-19 16:13 ` Dmitry Gutov
2023-10-08 9:10 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-08 10:25 ` Dmitry Gutov
2023-10-09 21:40 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-12 4:53 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors [this message]
2023-10-12 11:34 ` Dmitry Gutov
2023-10-13 15:57 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-14 6:13 ` Eli Zaretskii
2023-10-14 14:31 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-15 6:13 ` Eli Zaretskii
2023-10-16 16:33 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-16 20:16 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-19 12:18 ` Eli Zaretskii
2023-10-21 2:52 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-15 0:45 ` Dmitry Gutov
2023-09-15 1:38 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-15 16:38 ` Dmitry Gutov
2023-09-15 17:54 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-15 18:00 ` Dmitry Gutov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87v8bcqvr0.fsf@breatheoutbreathe.in \
--to=bug-gnu-emacs@gnu.org \
--cc=65797@debbugs.gnu.org \
--cc=dmitry@gutov.dev \
--cc=eliz@gnu.org \
--cc=joseph@breatheoutbreathe.in \
--cc=mattias.engdegard@gmail.com \
--cc=monnier@iro.umontreal.ca \
--cc=philipk@posteo.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.