【问题标题】:Trouble with defining simple emacs command定义简单的 emacs 命令时遇到问题
【发布时间】:2013-09-22 01:33:33
【问题描述】:

我是 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:我不在乎(我认为)
    activate: 显然默认情况下不正确,所以我需要将其设置为...某事。

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

错误肯定是由于 push-mark 函数调用,因为其他函数,如 back-char(我没有向其传递输入)正常工作

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    正如 C-hf 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)))

    【讨论】:

      【解决方案2】:

      补充一点@phils 所说的内容:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-16
        • 1970-01-01
        • 2011-04-03
        • 2020-02-28
        • 2017-10-09
        • 2016-08-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多