簡體   English   中英

Emacs執行兩次“ c-mode-hook”

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM