【发布时间】:2023-07-29 03:57:01
【问题描述】:
这是我的 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-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()
【问题讨论】:
-
如果您使用
emacs -Q调用 Emacs,然后评估上面的 sn-p,然后加载 C 文件,是否还会发生这种情况? -
@Chris 是的。它发生了。我在问题中添加了堆栈跟踪。
-
我认为这是 emacs 中的一个错误。这里有一个讨论:debbugs.gnu.org/cgi/bugreport.cgi?bug=16759
-
有趣。所以它已经存在了一段时间。