如何在Emacs中删除“切换多Web模式;更好地传递显式参数”消息?

时间:2013-11-21 21:10:55

标签: emacs mode

我已经注意到,有一段时间,我每次在multi-web-mode运行emacs时都会收到以下消息:“关闭多网络模式;更好地传递明确的参数

为什么我会这样做?多网页模式没有切换,因为我使用它并且它工作正常,但我一直收到此消息。

我该如何解决这个小麻烦?

这是我的.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))

1 个答案:

答案 0 :(得分:0)

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

这当然是一种糟糕的形式,因为它确实可以作为一种切换,就像在交互式情况下一样(例如 M-x multi-web-mode)。但是,从Emacs 24开始,它实际上是安全的(至少对于用标准宏定义的模式),因为非交互式调用没有模式函数的参数现在总是意味着'启用'。这可能是因为您实际上没有发现问题。

我不认为股票Emacs曾经生成过这样的消息,所以我认为它是多网络模式本身就是检测和报告这个。可能需要更新以反映Emacs 24中的更改。编辑:看起来我错了;我猜Emacs 23.4确实产生了此警告。)

您最简单的修复可能是向您展示配置中提及multi-web-mode的所有行,因此有人可以向您展示如何更改它以确保它传递显式参数(通常为1启用模式)。


编辑:好的,您的问题是multi-web-mode是次要模式(与主要模式相反),但您已在auto-mode-alist指定了它将文件名模式映射到主要模式的机制。

因此,当我说“一个常见的原因是指定一个模式函数符号用作回调”时,原因正如我上面所建议的那样,因为那些auto-mode-alist条目将导致调用{{1 }}

在我看来,(multi-web-mode)处理根据需要启用次要模式,因此您只需要删除错误的multi-web-global-mode条目。