如何在Emacs中删除"Toggling multi-web-mode off; better pass an explicit argument"消息?



我注意到,从一段时间以来,每次在多web模式下运行emacs时,我都会收到以下消息:"关闭多web模式;最好传递一个显式参数"。

为什么我会明白?multi-web模式没有被关闭,因为我使用它,它工作得很好,但我一直收到这个消息。

我该怎么解决这个小麻烦?

这是我在.emacs文件中的代码,其中显示了"multi-web mode"(我使用的是emacs 23.4):

(require 'multi-web-mode)
(setq mweb-default-major-mode 'html-mode)
(setq mweb-tags '((c++-mode "<\?php\|<\? \|<\?=" "\?>")
                  (ecmascript-mode "<script +\(type="text/javascript"\|language="javascript"\)[^>]*>" "</script>")
                  (css-mode "<style +type="text/css"[^>]*>" "</style>")))
(setq mweb-filename-extensions '("php" "htm" "html" "ctp" "phtml" "php4" "php5"))
(multi-web-global-mode 1)
(add-to-list 'auto-mode-alist '("\.php\'" . multi-web-mode))
(add-to-list 'auto-mode-alist '("\.html\'" . multi-web-mode))

听起来好像有一些代码导致了这种模式的调用,不以交互方式进行,没有参数:(multi-web-mode)。一个常见的原因是指定一个模式函数符号用作回调,而不是指定一个函数来调用该模式函数(带参数)。

这在过去肯定是一种糟糕的形式,因为它确实会起到切换的作用,就像在交互式情况下一样(例如M-xmulti-web-mode)。然而,由于Emacs 24实际上是安全的(至少对于用标准宏定义的模式),因为对模式函数没有参数的非交互式调用现在总是意味着"启用"。这可能是你实际上没有看到问题的原因。

我认为stock Emacs从未生成过这样的消息,所以我认为这是多web模式本身在检测和报告这一消息。它可能需要更新以反映Emacs 24的变化。编辑:看起来我错了;我想Emacs 23.4确实产生了这个警告。)

您最简单的解决方案可能是向我们显示配置中提到multi-web-mode的任何行,这样有人可以向您展示如何更改它,以确保它通过显式参数(通常是1来启用模式)。


编辑:好的,你的问题是multi-web-mode是一个次要模式(而不是主要模式),但你在auto-mode-alist中指定了它,这是一种将文件名模式映射到主要模式的机制。

因此,原因正如我在上面所说的"一个常见的原因是指定一个模式函数符号用作回调",因为这些自动模式列表条目将导致对(multi-web-mode)的调用。

在我看来,multi-web-global-mode可以根据需要启用次要模式,所以您只需要删除坏的auto-mode-alist条目。

最新更新