2012-12-13 11 views
5

나는 이맥스에 매우 익숙하다는 말로 시작하겠습니다.메이저 모드 후크 구성이 다른 버퍼에 영향을 미침

메이저 모드에 대한 사용자 지정을 만들려고합니다. 내 설정이 올바르게 작동하는 동안 새로운 버퍼를 열면 버퍼가 메이저 모드 사용자 정의가 다른 유형의 다른 버퍼에 적용되는 것을 관찰하고 있습니다.

예를 들어, 'Makefile'이라는 파일을 열면 makefile-mode가 사용되며 사용자 정의가 적용됩니다. 그런 다음 'test.c'와 같은 다른 파일을 열면 c-mode가 사용되지만 makefile-mode의 사용자 정의가 c-mode의 사용자 정의와 병합됩니다.

내 이맥스 파일의 관련 부분

아래 볼 수 있습니다 :

(defun c-mode-settings() 
    (c-set-style     "bsd") 
    (set-buffer-file-coding-system 'utf-8-unix) 
    (show-paren-mode    1) 

    (setq c-basic-offset  4) 
    (setq tab-width    4) 
    (setq indent-tabs-mode  nil) 
    (setq c-tab-always-indent t) 
    (setq require-final-newline t) 
) 

(defun makefile-mode-settings() 
    (setq whitespace-style '(tabs spaces space-mark tab-mark face lines-tail)) 
    (whitespace-mode  t) 
    (show-paren-mode  1) 

    (setq tab-width    4) 
    (setq require-final-newline t) 
) 

(add-hook 'c-mode-hook  'c-mode-settings) 
(add-hook 'makefile-mode-hook 'makefile-mode-settings) 

어떻게 다른 모드에서 다른 버퍼에 영향을 미치는 이러한 모드 후크를 유지할 수 있습니다?

감사합니다. Andrew

답변

4

일부 변수는 설정시 버퍼에 로컬이되고 일부는 전역 변수가되도록 고려해야합니다. 보통 그들은 당신이

(set (make-local-variable 'var-name) var-value) 

를 사용하여 버퍼에 어떤 변수가 지역이 될 것을 강제 할 수 있습니다, 어떤 경우에는

. 자신의 설명 (이 설명을 얻을 수 C-h v var-name를 사용에 해당하는 의견을 가지고 있지만 당신은 신중해야

+0

글로벌 마이너 모드가 로컬이되도록 강제하는 방법이 있습니까? 특히 show-paren-mode가 문제의 원인이되므로 – user1902144

+0

user1902144 : [자동으로 사용 안 함 특정 주요 모드에 대한 글로벌 마이너 모드] (http://stackoverflow.com/questions/6837511/au) 전역 적으로 사용 불능 - 글로벌 - 마이너 - 모드 - 특정 - 메이저 - 모드/6839968) – phils