Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
52b71f49
Commit
52b71f49
authored
Jul 25, 2007
by
Stefan Monnier
Browse files
(Fcommandp): Pay attention to the `interactive-form' property.
parent
c4f46926
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
20 additions
and
13 deletions
+20
-13
src/eval.c
src/eval.c
+20
-13
No files found.
src/eval.c
View file @
52b71f49
...
...
@@ -2040,42 +2040,49 @@ then strings and vectors are not accepted. */)
{
register
Lisp_Object
fun
;
register
Lisp_Object
funcar
;
Lisp_Object
if_prop
=
Qnil
;
fun
=
function
;
fun
=
indirect_function
(
fun
);
if
(
EQ
(
fun
,
Qunbound
))
fun
=
indirect_function
(
fun
);
/* Check cycles. */
if
(
NILP
(
fun
)
||
EQ
(
fun
,
Qunbound
))
return
Qnil
;
/* Check an `interactive-form' property if present, analogous to the
function-documentation property. */
fun
=
function
;
while
(
SYMBOLP
(
fun
))
{
Lisp_Object
tmp
=
Fget
(
fun
,
intern
(
"interactive-form"
));
if
(
!
NILP
(
tmp
))
if_prop
=
Qt
;
fun
=
Fsymbol_function
(
fun
);
}
/* Emacs primitives are interactive if their DEFUN specifies an
interactive spec. */
if
(
SUBRP
(
fun
))
{
if
(
XSUBR
(
fun
)
->
prompt
)
return
Qt
;
else
return
Qnil
;
}
return
XSUBR
(
fun
)
->
prompt
?
Qt
:
if_prop
;
/* Bytecode objects are interactive if they are long enough to
have an element whose index is COMPILED_INTERACTIVE, which is
where the interactive spec is stored. */
else
if
(
COMPILEDP
(
fun
))
return
((
ASIZE
(
fun
)
&
PSEUDOVECTOR_SIZE_MASK
)
>
COMPILED_INTERACTIVE
?
Qt
:
Qnil
);
?
Qt
:
if_prop
);
/* Strings and vectors are keyboard macros. */
if
(
NILP
(
for_call_interactively
)
&&
(
STRINGP
(
fun
)
||
VECTORP
(
fun
))
)
return
Qt
;
if
(
STRINGP
(
fun
)
||
VECTORP
(
fun
))
return
NILP
(
for_call_interactively
)
?
Qt
:
Qnil
;
/* Lists may represent commands. */
if
(
!
CONSP
(
fun
))
return
Qnil
;
funcar
=
XCAR
(
fun
);
if
(
EQ
(
funcar
,
Qlambda
))
return
Fassq
(
Qinteractive
,
Fcdr
(
XCDR
(
fun
)));
return
!
NILP
(
Fassq
(
Qinteractive
,
Fcdr
(
XCDR
(
fun
)))
)
?
Qt
:
if_prop
;
if
(
EQ
(
funcar
,
Qautoload
))
return
Fcar
(
Fcdr
(
Fcdr
(
XCDR
(
fun
))));
return
!
NILP
(
Fcar
(
Fcdr
(
Fcdr
(
XCDR
(
fun
))))
)
?
Qt
:
if_prop
;
else
return
Qnil
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment