[英]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.