From: Lars Ingebrigtsen Date: Sat, 20 Feb 2021 13:29:41 +0000 (+0100) Subject: Change how (declare (modes store the data X-Git-Tag: emacs-28.0.90~3634 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=12578d6aca2cc7182afdd070aa31c7aff6a3add8;p=emacs.git Change how (declare (modes store the data * lisp/emacs-lisp/byte-run.el (byte-run--set-modes): Change from being a predicate to storing the modes. This allows using the modes for positive command discovery, too. * src/data.c (Fcommand_modes): Look at the `command-modes' symbol property, too. --- diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el index 76e7f01ace6..afe94bb0352 100644 --- a/lisp/emacs-lisp/byte-run.el +++ b/lisp/emacs-lisp/byte-run.el @@ -154,9 +154,7 @@ The return value of this function is not used." (defalias 'byte-run--set-modes #'(lambda (f _args &rest val) (list 'function-put (list 'quote f) - ''completion-predicate - `(lambda (_ b) - (command-completion-with-modes-p ',val b))))) + ''command-modes (list 'quote val)))) ;; Add any new entries to info node `(elisp)Declare Form'. (defvar defun-declarations-alist diff --git a/src/data.c b/src/data.c index ace859d2d0c..9af9131b123 100644 --- a/src/data.c +++ b/src/data.c @@ -957,9 +957,17 @@ The value, if non-nil, is a list of mode name symbols. */) if (NILP (fun)) return Qnil; + /* Use a `command-modes' property if present, analogous to the + function-documentation property. */ fun = command; while (SYMBOLP (fun)) - fun = Fsymbol_function (fun); + { + Lisp_Object modes = Fget (fun, Qcommand_modes); + if (!NILP (modes)) + return modes; + else + fun = Fsymbol_function (fun); + } if (COMPILEDP (fun)) {