簡體   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