我想编写一个 Emacs Lisp 函数,无论模式的当前状态如何,都能打开 flyspell-mode
。函数 flyspell-mode-on
已经被弃用。文档建议使用正数前缀参数来打开flyspell-mode
,但是运行以下命令不起作用:
(flyspell-mode 1)
导致一个错误消息:
Wrong number of arguments: (lambda (flyspell-mode 1)), 0
如果我能找出如何使用前缀参数调用flyspell-mode
,我相信我可以解决这个问题。在Emacs Lisp手册中,我能找到的最相关的部分是标题为“交互调用”的部分,其中描述了
call-interactively
等命令。这绝不是我想要的。(我试图解决的终极问题是创建一个模式钩子,无论其当前状态如何都会打开该模式。)
注:问题标题为emacs lisp call function with prefix argument programmatically,但那个问题询问如何创建一个交互式命令,并且问题最终通过使用
call-interactively
解决。
编辑:这个问题没有意义;我已经找到了原问题的替代解决方案:
(add-hook 'text-mode-hook
(function (lambda ()
(require 'flyspell)
(if flyspell-mode nil (flyspell-mode)))))
我仍然想知道如何在另一个Emacs Lisp函数中无需交互就使用前缀参数调用Emacs Lisp函数。
更新: 或许我应该问为什么我会收到那个错误信息...
(lambda (flyspell-mode 1))
而不是(lambda () (flyspell-mode 1))
,因此Emacs将(flyspell-mode 1)
视为参数列表而不是要评估的表达式。 - Stefan