2017-09-24 22 views
1

내가 작업하고있는 특정 모드가 python-mode이라고 가정 해 봅시다. 후크에 대해 다음 이맥스 수동 지정은 :이맥스에서 지정된 메이저 모드에 대한 eval-after-load 실행 순서의 실행 순서

모든 주요 모드 명령 초기화의 마지막 단계 중 하나로 모드 후크라는 일반적인 훅을 실행하기로한다. 주요 모드 규칙에서

:

각 주요 모드가 modename-mode-hook라는 일반 모드 훅이 있어야합니다. 주 모드 명령이 수행해야 할 마지막 작업은 run-mode-hooks입니다.

with-eval-after-load은 코드가로드 된 후 (예 : 필수) 코드를 실행하고 필요한 경우 즉시 실행됩니다.

내 init 파일에 다음과 같은 한 : 또한 내가 지금은 파이썬 파일 버퍼를 열어 다음 이맥스를 열 가정

(with-eval-after-load 'python-mode 
    (setq-default python-basic-offset 7) ; setting some option 
    (add-to-list 'python-globals-list "console")) 

을 추가 한

(add-hook 'python-mode-hook 'my-post-python) 

, 로딩/실행이 무엇인지 후크와 관련된 주문 및 with-eval-after-load? 시작시 지정한 문서에서 모드 후크가 with-eval-after-load 코드보다 먼저 실행되는 것 같습니다.

더 구체적으로 말하자면, 모드 버퍼는 현재 버퍼에 입력/작성 될 때마다 실행됩니까? (추신 : docs/manual에서 찾기가 어렵습니다. 위의 문서 중 하나를 설명하는 링크는 모두 환영합니다).

답변

2

이제 emacs를 연 다음 python 파일 버퍼를 여는 것으로 가정하고 후크 및 -eval-after-load와 관련하여로드/실행 순서는 무엇입니까?

이미 다음,로드되지 python.el을 가정하고있다 :

  • 당신은 foo.py를 방문하십시오.
  • set-auto-mode이 호출되어 python-mode이 적절하다고 판단하고이를 호출합니다.
  • python-mode 함수는 (이 시점에서) python-mode 라이브러리 에 대한 자동로드 정의이며 결과적으로로드됩니다.
  • 로드가 끝나면 python-mode 라이브러리의 with-eval-after-load이 평가됩니다.
  • 실제 python-mode 함수 (라이브러리를로드하여 새로 정의 됨)가 호출됩니다.이 중 끝에는
  • python-mode-hook이 실행됩니다.

모드 후크/버퍼가 입력 될 때마다 실행되는 현재의 버퍼를 만들어 있습니까?

아니요, 모드 기능이 호출 될 때마다 실행됩니다.


1 기본 라이브러리는 (provide 'python)을 사용 python.el,하지만 당신은 with-eval-after-load 당신이 evidentially 대신 python-mode.el 라이브러리를 사용하고부터.

+0

고마워요! 나는 소스를 보았고, 이것으로부터 배운 것은 모드 작성자가 스스로 후크를 실행하지 않는다는 것입니다 (그들은 단지 후크를 타입 후크로 정의합니다). 그러나이 경우 누가 후킹을 실행합니까? –

+0

주요 모드는 일반적으로'define-derived-mode'로 정의됩니다. 자동으로 후크 변수를 만들고'run-mode-hooks '를 호출하여 mode 명령을 정의합니다. – jpkotta

+0

OTOH가 모드 매크로를 정의하기 위해 표준 매크로를 사용하지 않는다면, 그러한 모든 예상 된 하우스 키핑을 수동으로 구현하는 것은 사용자의 책임입니다. – phils