5

当我在缓冲区上按下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 。

4

1 回答 1

14

您缺少将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 的情况,无论如何这不会做你想要实现的......

于 2013-04-08T13:53:16.437 回答