To define commands that can be invoked via M-x or via a key shortcut, you’d usually use:
(defun command-name (args) "Docstring" (interactive "spec") <lisp stuff> )
But then, that is tedious to type, and I all to often forget the (interactive ..) magic. Enter defcommand.
(defmacro defcommand (name args interactive docstring &rest body)
"Define an interactive command.
NAME is the command name, ARGS are the command arguments. INTERACTIVE
is the string passed to `interactive' and DOCSTRING is the
function docstring.
BODY is the function body."
`(defun ,name ,args
,docstring
,(if interactive
`(interactive ,interactive)
'(interactive))
,@body))With this command, you can simply do this:
(defcommand command-name (args) "spec" "Docstring" <lisp stuff> )
See? Much shorter, and you can’t forget the interactive thingy!
If you want to define a command that takes no args, use:
(defcommand command-name () nil "Docstring" <lisp stuff> )