]> git.eshelyaron.com Git - emacs.git/commitdiff
(Finteractive_form): Check for the presence of an
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 25 Jul 2007 21:03:24 +0000 (21:03 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 25 Jul 2007 21:03:24 +0000 (21:03 +0000)
`interactive-form' symbol property more thoroughly.

src/ChangeLog
src/data.c

index bfdf9abb5d248c1c31ef7cf1c966e2bd4c7e2729..49613185ae4e529f0bf3813dd72768e7b7bd7656 100644 (file)
@@ -1,6 +1,11 @@
 2007-07-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-       * data.c (Finteractive_form): Use a `interactive-form' property if
+       * eval.c (Fcommandp): Pay attention to the `interactive-form' property.
+
+       * data.c (Finteractive_form): Check for the presence of an
+       `interactive-form' symbol property more thoroughly.
+
+       * data.c (Finteractive_form): Use an `interactive-form' property if
        present, analogous to the function-documentation property.
 
 2007-07-22  Nick Roberts  <nickrob@snap.net.nz>
index f705aa559e8403d3c54efdbd0c84e8fc99c77eee..15169d3d3f4f7c77b5794ec7b202a3e11139bbb3 100644 (file)
@@ -750,15 +750,24 @@ Value, if non-nil, is a list \(interactive SPEC).  */)
      (cmd)
      Lisp_Object cmd;
 {
-  Lisp_Object fun = indirect_function (cmd);
-  Lisp_Object tmp;
-
-  if (SYMBOLP (cmd)
-      /* Use an `interactive-form' property if present, analogous to the
-        function-documentation property. */
-      && (tmp = Fget (cmd, intern ("interactive-form")), !NILP (tmp)))
-    return tmp;
-  else if (SUBRP (fun))
+  Lisp_Object fun = indirect_function (cmd); /* Check cycles.  */
+  
+  if (NILP (fun) || EQ (fun, Qunbound))
+    return Qnil;
+
+  /* Use an `interactive-form' property if present, analogous to the
+     function-documentation property. */
+  fun = cmd;
+  while (SYMBOLP (fun))
+    {
+      Lisp_Object tmp = Fget (fun, intern ("interactive-form"));
+      if (!NILP (tmp))
+       return tmp;
+      else
+       fun = Fsymbol_function (fun);
+    }
+
+  if (SUBRP (fun))
     {
       if (XSUBR (fun)->prompt)
        return list2 (Qinteractive, build_string (XSUBR (fun)->prompt));