gpt4 book ai didi

c - Emacs 执行两次 `c-mode-hook`

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:36 25 4
gpt4 key购买 nike

这是我的 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]

这是功能还是错误?没有其他 Hook 被多次执行 AFAIK。另外,现在我似乎无法在 Hook 中切换功能。

我查看了变量 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()

最佳答案

根据我对错误报告的评论 http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16759我认为语言 Hook 不能保证对多种语言模式执行一次。我怀疑问题是由于使用 define-derived-mode 造成的,它是一个 lisp 宏,用于定义已经包含对 Hook 的调用的模式,这意味着在该模式中调用的 Hook 将被额外执行。

您可能想尝试初始化 Hook 。手册说:

Variable: c-initialization-hook

Hook run only once per Emacs session, when CC Mode is initialized. This is a good place to change key bindings (or add new ones) in any of the CC Mode key maps. See Sample Init File.

它给出的样本在这里:https://www.gnu.org/software/emacs/manual/html_node/ccmode/Sample-Init-File.html#Sample-Init-File

关于c - Emacs 执行两次 `c-mode-hook`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32317650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com