当我在缓冲区中使用以下代码按C-c c
时,Emacs会向Invalid function: (select-current-line)
投诉。为什么?
(defun select-current-line ()
"Select the current line"
(interactive)
(end-of-line) ; move to end of line
(set-mark (line-beginning-position)))
(defun my-isend ()
(interactive)
(if (and transient-mark-mode mark-active)
(isend-send)
((select-current-line)
(isend-send)))
)
(global-set-key (kbd "C-c c") 'my-isend)
并不重要,但对于那些感兴趣的isend-send来说,这里定义了。
答案 0 :(得分:12)
您缺少一个progn
表单来将语句组合在一起:
(defun my-isend ()
(interactive)
(if (and transient-mark-mode mark-active)
(isend-send)
(progn
(select-current-line)
(isend-send))))
如果没有progn
表单,((select-current-line) (isend-send))
将被解释为应用于不带参数调用(select-current-line)
的结果的isend-send
函数。但(select-current-line)
不是有效的函数名称。在其他LISP中,如果select-current-line
的返回值本身就是一个函数,那么这样的构造可能是有效的,然后将其应用于(isend-send)
。但这不是Emacs LISP的情况,而且无论如何都不会做你想要实现的......