Emacs:打开XML文件时的钩子

Emacs:打开XML文件时的钩子,emacs,elisp,Emacs,Elisp,我将这些内容放在配置文件中: (add-hook 'sgml-mode-hook (lambda () (message "SGML"))) (add-hook 'html-mode-hook (lambda () (message "HTML"))) (add-hook 'xml-mode-hook (lambda () (message "XML"))) 打开.html文件时,它会按预期打印“SGML”和“html”。 但当打开.xml文件时,不会打印任何文件 问题:那么如何为xml文件

我将这些内容放在配置文件中:

(add-hook 'sgml-mode-hook (lambda () (message "SGML")))
(add-hook 'html-mode-hook (lambda () (message "HTML")))
(add-hook 'xml-mode-hook  (lambda () (message "XML")))
打开.html文件时,它会按预期打印“SGML”和“html”。 但当打开.xml文件时,不会打印任何文件

问题:那么如何为xml文件添加钩子呢?

注意:这个答案适用于Emacs 22和更早版本。有关Emacs 23+,请参阅已接受的答案

XML模式是SGML模式的别名。您可以通过检查变量
SGML XML mode
来测试是否处于XML或SGML变量中,如下所示:

(add-hook 'sgml-mode-hook (lambda () (message (if sgml-xml-mode "XML" "SGML"))))

手册中记录了该模式。

您是否尝试过nxml模式,如:

(add-hook 'nxml-mode-hook  (lambda () (message "XML")))

在我的emacs(OS X上的GNU emacs 23.2.1)上,XML的默认主模式称为
nXML
,并带有相关的
nXML模式挂钩。也许
xml模式
也不是您的xml主模式?在我的emacs上,打开.xml文件时不会调用sgml模式钩子啊,是的,我在玩一个旧的emacs,最新的使用nxml。