]> git.eshelyaron.com Git - emacs.git/commitdiff
Change how (declare (modes store the data
authorLars Ingebrigtsen <larsi@gnus.org>
Sat, 20 Feb 2021 13:29:41 +0000 (14:29 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Sat, 20 Feb 2021 13:29:41 +0000 (14:29 +0100)
* 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.

lisp/emacs-lisp/byte-run.el
src/data.c

index 76e7f01ace64d8d3b329e39caccd1efebf4ec688..afe94bb03528e004a24f3cb42a7b71ca4af22f78 100644 (file)
@@ -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
index ace859d2d0cc2daf6458b900c643af0865bfd8c6..9af9131b123bf0b2a1305fec611e08651ae242c3 100644 (file)
@@ -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))
     {