我想写一个 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
之类的命令。 .这显然不是我想要的。(我试图解决的最终问题是创建一个模式 Hook ,无论其当前状态如何,它都会打开模式。)
注:问题标题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 函数,而没有任何交互。
更新 : 也许我应该问为什么我会收到那个错误信息......
最佳答案
您的 Flyspell 模式版本似乎不遵循 minor mode conventions ,这要求您可以使用 (name-of-mode t)
打开次要模式或任何正前缀参数,用 (name-of-mode 0)
关闭它任何否定前缀参数,并用 (name-of-mode nil)
切换它.
如果您拥有最新版本的 Flyspell,则可能需要提交错误报告。我的机器上有 GNU Emacs 23.2 附带的版本,它遵守约定。我的版本还定义了两个函数turn-on-flyspell
和 turn-off-flyspell
, flyspell-mode
周围的两个微不足道的包装器;具有此类名称的函数很常见,但不是官方约定。功能 flyspell-mode-on
和 flyspell-mode-off
显然是供内部使用的。
一般来说,命令从 current-prefix-arg
读取当前前缀参数。多变的。不要将其与 prefix-arg
混淆,这是下一个命令的值(只有少数命令,如 universal-argument
触摸此变量)。因此,如果您需要在调用函数时传递前缀参数,请绑定(bind)或设置 current-prefix-arg
.
(let ((current-prefix-arg t))
(flyspell-mode))
关于emacs - 如何从另一个 Emacs Lisp 函数调用带有前缀参数的交互式 Emacs Lisp 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9387816/