繁体   English   中英

emacs:手动切换模式时绕过模式挂钩

[英]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-modejs-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-hookjs-mode-hook在 JavaScript 文件打开时都会被识别并在启动时运行。

但是,当手动切换到 JavaScript 时,只会运行js-mode-hook js-modejavascript-mode模式都会触发JavaScript模式(至少它们在状态行中显示为(JavaScript) ),所以有人厌倦了输入“avacript”字母并将它们踢出“javascript”但忘记了清理一些乱七八糟的...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM