[英]emacs: mode hook is bypassed when mode is switched by hand
在我的.emacs
有以下模式挂钩:
(defun my-html-mode-hook ()
(interactive)
(setq tab-width 4
;; this will make sure TABs are used instead of spaces
indent-tabs-mode t)
)
(defun my-javascript-mode-hook ()
(interactive)
(setq tab-width 4
;; this will make sure TABs are used instead of spaces
indent-tabs-mode t)
)
(add-hook 'javascript-mode-hook 'my-javascript-mode-hook)
(add-hook 'html-mode-hook 'my-html-mode-hook)
现在,当我打开.html
,它按预期工作,打开.js
。
但是,当打开.html
然后手动通过Mx javascript-mode
切换到 JavaScript 时,不会运行my-javascript-mode-hook
(至少标签宽度切换到 8)。 当我手动切换模式时如何使该钩子运行?
恐怕没有javascript-mode-hook
。 当然不是默认的。
javascript-mode
是js-mode
的别名,意味着只定义了js-mode-hook
。 但是,变量别名也是一回事——我建议你Mx report-emacs-bug
并询问javascript-mode-hook
是否可以定义为js-mode-hook
的变量别名。 只要该defvaralias
是自动加载的(以及模式的别名,因此在您使用它之前),我相信它会按预期工作。
因此,正如我所料,在打开.js
文件的情况下,我无法重现/确认您的断言,即javascript-mode-hook
“按预期工作”。 您的代码在 Emacs 26.3 或 27.0.90 中都没有这种行为。
命名上似乎存在一个可怕的歧义,即javascript-mode-hook
和js-mode-hook
在 JavaScript 文件打开时都会被识别并在启动时运行。
但是,当手动切换到 JavaScript 时,只会运行js-mode-hook
。 js-mode
和javascript-mode
模式都会触发JavaScript
模式(至少它们在状态行中显示为(JavaScript)
),所以有人厌倦了输入“avacript”字母并将它们踢出“javascript”但忘记了清理一些乱七八糟的...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.