2012-08-11 1 views
1

을 실행 나타납니다 그때는 모든 라인

(require 'cc-mode) 

(add-hook 'c-mode-common-hook '(lambda() (print "hello"))) 

(add-hook 'c-mode-hook '(lambda() (print "hello c"))) 

(c-mode) 
을 평가 후면 C-XC-E를 사용

이 후 미니 버퍼는

"hello" 

"hello c" 

"hello c" 
nil 

및 C++ 보여줍니다 - 그냥 같은 모드 - 후크 실행

(add-hook 'c++-mode-hook '(lambda() (print "hello c++"))) 

(c++-mode) 

미니 버퍼가 두 번 실행 또는 뭔가 잘못 왜

"hello" 

"hello c++" 

"hello c++" 
nil 

.

답변

0

언어 별 후크가 두 번 이상 실행되는 것으로 보입니다. 이 경우에 (run-hooks c-mode-hook) 또는 (run-hooks c-mode-common-hook)을 실행하면 확인할 수 있으며 print 문은 한 번만 발생합니다.

후크의 일반적인 조언은 실행되는 순서에 의존하지 말아야합니다. 실행 횟수에 따라 다르지 않습니다. 자연스럽게 확장 된 것처럼 보입니다.

2

"C"파일에 잘못된 연결 고리를 사용하고 있습니다. 올바른 후크는 "c-mode-hook"입니다.

"c-mode-common-hook"훅은 모든 c-style 언어 앞에 실행됩니다. 즉, java, objective-c, awk 및 기타와 같은 많은 언어에서 후크가 실행됩니다. 이 후크에 대한 자세한 내용은 here을 참조하십시오.

1

이 버그에 대한 보고서가 있습니다 http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16759 언어 훅은 여러 언어 모드에 대해 한 번 실행될 것이라고는 생각하지 않습니다. 이 문제는 이미 후크 호출을 포함하는 모드를 정의하기위한 lisp 매크로 인 define-derived-mode을 사용하는 것으로 판단됩니다. 이는 해당 모드에서 호출 된 후크가 추가 실행이된다는 것을 의미합니다.

초기화 훅을 사용해보십시오. 설명서는 말한다 :

변수 : C-초기화 훅 CC 모드가 초기화 한 번만 이맥스 세션 당

후크 실행. 이는 CC 모드 키 맵에서 키 바인딩을 변경 (또는 새 바인딩 추가)하기 좋은 장소입니다. 샘플 초기화 파일을 참조하십시오.

가 제공 샘플은 여기에 있습니다 : https://www.gnu.org/software/emacs/manual/html_node/ccmode/Sample-Init-File.html#Sample-Init-File