2011-04-23 4 views
1

c-mode가로드 될 때 "my-c-setup.el"이라는 파일을로드하려고합니다. 그래서, "autoload"함수를 사용하고 있습니다. 내 파이썬 설치와Emacs c-mode autoloading failed

, 그것은 잘 작동 :

lang.el

(autoload 'python-mode "my-python-setup" "" t) 

내 - 파이썬 - setup.el 나 '

(require 'python) 
; ... 

나는 c- 모드와 동일하게하려고 노력하지만, id OES 작동하지 :

lang.el

(autoload 'c-mode "my-c-setup" "" t) 

내-C-setup.el

(setq c-basic-offset 4) 
; ... 

전 C 모드에서 파일 (시험을 열려고. c) 예를 들어, 다음 오류가 있습니다.

File mode specification error: (error "Autoloading failed to define function c-mode") 

답변

5

자동로드가 당신이 원하는 것이 아닙니다. 그것이하는 일은 필요한 코드를 처음으로로드하는 것입니다. 이것은 시작 시간을 낮게 유지하면서 Emacs의 기능을 확장하는 편리한 방법입니다.

문제를 해결하려면 실제로 원하는 코드에 대해 생각해야합니다. 즉, 일부 지점에서 코드를로드하고 싶거나 버퍼가없는 로컬 사용자 지정을 원할 경우 c-mode ?

당신은 단순히 이맥스 시작시 코드를로드 중 당신의 .emacs 파일에 직접 코드를 삽입 또는 load-file 또는 require 대신 autoload을 사용하려면

:

load-file 단순히 파일 이름을 사용은 혀짤배기로드 해당 파일의 코드를 분석하고 평가합니다. 따라서 코드가 "/path/to/my-c-setup.el"이라는 파일에 있다면, .emacs에 다음 줄을 넣으면 코드는 매번 시작할 때마다로드됩니다 :

(load-file "/path/to/my-c-setup.el") 

아마도로드하는 모든 파일의 절대 경로 이름을 지정하고 싶지 않을 것입니다.

(add-to-list 'load-path "/path/to") 
(load-library "my-c-setup.el") 

장점은 당신이 할 필요가 있다는 것입니다 :이 경우, 당신은 변수 load-path에 저장되어있는 디렉토리의에 지정된 파일 이름을 찾을 load-file 비슷하지만 시도 대신에 기능 load-library를 사용할 수 있습니다 add-to-list 부분을 한 번만 입력하면 load-library을 호출하면 해당 디렉토리에서 코드를 찾을 수 있습니다.

다른 방법으로는 제공/요청 메커니즘이 있습니다. (provide 'feature) 전화를 걸어서 .el- 파일에 일부 기능을 "제공"할 수 있습니다.

(provide 'my-c-mode-customizations) 

는 그런 다음 이맥스 파일에 따라 (require 'feature)를 놓고, 코드뿐만 아니라로드됩니다

(require 'my-c-mode-customizations) 

그러나 c-mode가 활성화 될 때 코드 만로드 할 수 원하는 경우 버퍼는 그 달성하는 방법은 이멕스 'Hook기구 통해 : 후크 변수가

어디 수 저장소 함수 또는 함수 특정 프로그램에 기존 프로그램으로 호출 된 이 될 수 있습니다.

대부분의 주요 모드는 주요 모드가 호출 될 때마다 호출되는 함수를 추가 할 수있는 사용자 정의 가능한 후크 변수를 제공합니다. 예를 들어 C 모드는 c-mode-hook을 제공합니다. 물론

(add-hook 'c-mode-hook 'my-c-mode-customizations) 

: C-모드가 버퍼를 켤 때마다 자신의 사용자 정의 위해서는, 말하자면, 함수에 my-c-mode-customizations을 넣어 당신의 .emacs 파일에 다음 줄을 추가, 호출되는 이맥스가 실제로 그 함수의 정의를 찾으려면 여전히 autoload이 필요하다.

1

Lisp의 autoload은 파일이로드 될 때 함수를 호출하지 않지만 함수가 사용 가능하다는 것과 주어진 파일이이를 제공한다고 알려줍니다. 누군가 (아직 정의되지 않은) 함수를 호출 할 때마다 파일이로드됩니다.

나는 c-mode이 이미 정의되어있어 다시 등록하지 못한다고 생각합니다.