Emacs抱怨"invalid function"?

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 在这里被定义。


只是出于好奇,你为什么想要这样做?如果没有活动区域,调用 isend-send 就已经发送了当前行,所以我不明白你想要实现哪种行为。无论如何,请随意在 github 上提出功能请求... - François Févotte
1个回答

15

你缺少一个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))被解释为调用没有参数的isend-send函数的结果应用于(select-current-line)函数。但是(select-current-line)不是一个有效的函数名。在其他LISP中,如果select-current-line返回的值本身就是一个函数,那么这样的构造可能是有效的,然后将其应用于(isend-send)。但这在Emacs LISP中并不是这种情况,而且无论如何也无法实现您想要实现的功能...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接