[英]Emacs executes `c-mode-hook` twice
這是我的emacs配置
(require 'cc-mode)
(defun ffy-c-mode-hook ()
"This is settings for the C/C++ mode"
(message "ffy-c-mode-hook executed")
(electric-pair-mode +1)
(electric-indent-local-mode +1)
(if electric-indent-mode
(let ((binding (key-binding (kbd "RET"))))
(local-set-key (kbd "RET") (key-binding (kbd "C-j")))
(local-set-key (kbd "C-j") binding)))
(c-toggle-hungry-state +1)
(c-set-style "gnu")
(setq c-basic-offset 4))
(add-hook 'c-mode-hook #'ffy-c-mode-hook)
顯然c-mode-hook
被執行了兩次,因為當我打開一個C文件時,我看到:
user-error: Beginning of history; no preceding item
ffy-c-mode-hook executed [2 times]
是功能還是錯誤? AFAIK不會多次執行其他鈎子。 另外,現在看來我無法切換功能。
我看着變量c-mode-hook
,它的值是(ffy-c-mode-hook)
Emacs和CC-mode的版本是
GNU Emacs 24.5.1 (i686-pc-mingw32) of 2015-04-11 on LEG570
Using CC Mode version 5.32.5
ffy ffy-c-mode-hook
上的ffy-c-mode-hook
ffy-c-mode-hook()
run-hooks(change-major-mode-after-body-hook prog-mode-hook c-mode-common-hook c-mode-hook c-mode-hook)
apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook c-mode-common-hook c-mode-hook c-mode-hook))
run-mode-hooks(c-mode-hook)
c-mode()
set-auto-mode-0(c-mode nil)
set-auto-mode()
在我對錯誤報告的評論http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16759之后,我認為對於多種語言模式,語言掛鈎都不會保證執行一次。 我懷疑問題是由於使用了define-derived-mode
,這是一個Lisp宏,用於定義已經包含對鈎子的調用的模式,這意味着在該模式下調用的鈎子將是額外的執行。
您可能想嘗試初始化掛鈎。 該手冊說:
變量:c-initialization-hook
初始化CC模式時,每個Emacs會話掛鈎僅運行一次。 這是在任何CC模式鍵映射中更改鍵綁定(或添加新鍵綁定)的好地方。 請參閱樣本初始化文件。
它提供的示例在這里: https : //www.gnu.org/software/emacs/manual/html_node/ccmode/Sample-Init-File.html#Sample-Init-File
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.