2013-10-01 12 views
1

emacs init 파일을 더 빨리로드하고 싶습니다. 'eval-after-load'를 사용합니다. 내가 Clojure의 파일을로드 할 때 예를 들어
, 난 그냥 작동emacs-lisp의 주요 모드 이름

(eval-after-load 'clojure-mode 
    'do-something) 

을 넣어.
하지만

(eval-after-load 'emacs-lisp-mode 
    'do-something) 

을 시도 할 때 작동하지 않습니다. emacs-lisp의 올바른 주요 모드 이름을 알고 싶습니다.
감사합니다.

+1

Emacs가 시작되면 자동으로 lisp-interaction-mode에있는 * scratch * 버퍼가 열립니다.이 모드는 lisp-mode.el에 정의되어 있습니다. 즉, 이맥스를 시작할 때 리스프 모드가 항상로드된다는 것을 의미합니다. 따라서'do-something'은'eval-after-load'에서 줄 바꿈 여부에 상관없이 실행됩니다. – Tyler

+0

고마워, 알았다. –

답변

2

M-:의 경우 major-mode으로 그냥 평가하십시오. 실제로는 emacs-lisp-mode입니다. *scratch*은 실제로 lisp-interaction-mode에 있습니다.

당신이하려는 일에 대해서는 (eval-after-load "lisp-mode")을 사용하십시오.

4

documentation of eval-after-load 읽어 보시기 바랍니다 :

이 기능은 파일 라이브러리를로드의 끝에서 양식을 평가하기 위해 배열

평가 - 후 부하 LIBRARY 양식, 때마다 라이브러리가로드됩니다. LIBRARY가 이미로드되어 있으면 즉시 양식을 평가합니다. 양식을 인용하는 것을 잊지 마십시오!

[...] LIBRARY는 기능 (즉, 기호) 일 수도 있습니다.이 경우 양식은 (provide LIBRARY)이 호출 된 파일의 끝에 평가됩니다.

주 모드를 정의하는 파일 또는 라이브러리의 이름을 인수로 전달해야합니다.

일부 모드는 동일한 이름의 파일 (예 : clojure-mode,)에 정의되어 있지만 실제로는 여러 주요 모드를 실제로 정의한 경우 다른 이름이 여러 파일에 저장됩니다.

emacs-lisp-mode는 이맥스 리스프 편집 (*scratch* 버퍼의 예를 들면 일반 리스프 언어 모드와 lisp-mode 또는 lisp-interaction-mode)에 대한 다른 형태와 함께 lisp-mode.el 정의된다.

따라서, 당신은 가능성이 기능 do-something 전화, (eval-after-load 'lisp-mode '(do-something))를 사용하는 것이 좋습니다 그래서

는 또한, 당신은 두 번째 인수로 하나의 sexp을주고있다) (eval-after-load 'lisp-mode …를 사용합니다.

이맥스의 스냅 샷 빌드를 사용하는 경우 즉 (with-eval-after-load 'lisp-mode (do-something))을 사용하십시오. 단일 양식 이상을 허용하며 따옴표가 필요하지 않습니다.

+0

고마워, 알았다. –

2

@lunaryom에서 설명한 것처럼 eval-after-load에 전달 된 arg는 함수 이름이 아니며 기본적으로 파일 이름 인 기능 이름입니다. 따라서 함수가로드 된 파일의 이름을 찾아야합니다. 우리는 eval-after-defun과 같은 기능을 제공 할 수 있으며 그렇게하는 것이 좋습니다. 그런 것을 원하면 M-x report-emacs-bug을 통해 요청하십시오.