定义简单的emacs命令有问题

时间:2013-09-22 01:33:34

标签: emacs elisp

我是emacs的新手,也是lisp的新手

我正在尝试设置Meta +空格键来设置突出显示文本的标记(在当前光标位置)。 在网上搜索和试验我最终得到了命令

(global-set-key (kbd "M-SPC") 'push-mark nil nil 1)

上面的命令对我不起作用,我得到“错误的参数数量错误”。

获得了函数定义,

    push-mark& optional position nomsg activate
from elisp manual here

    位置:位置的nil应默认为当前光标位置
    nomsg:我不在乎(我认为)
    激活:默认情况下显然不正确,所以我需要将其设置为......某事。

如何格式化命令以传递三个值?

错误肯定是由于推送标记函数调用,因为其他函数(例如reverse-char(我没有传递输入)正常工作

2 个答案:

答案 0 :(得分:2)

Ch f global-set-key RET 告诉您,global-set-key有两个参数:(global-set-key KEY COMMAND)

你传递了五个参数:(global-set-key (kbd "M-SPC") 'push-mark nil nil 1)

因此“错误的论点数量”。

您可以为命名函数提供符号,也可以为匿名函数/ lambda提供符号。

例如:(global-set-key (kbd "M-SPC") (lambda () (interactive) (push-mark nil nil 1)))

答案 1 :(得分:2)

为@phils所说的添加一点:

  1. push-mark不是命令:其定义没有interactive规范。请注意,phils的示例在匿名函数中包含(interactive),使其成为命令。

  2. push-mark不同,顾名思义,push-mark-command是一个命令。如果您想要push-mark的效果,那么只需绑定push-mark-command,或者更好set-mark-command