후크 란 무엇입니까?


8

명확히하기 위해 ... 예를 들어이 문서에서 :

후크는 잘 정의 된 경우에 호출 할 함수 목록을 보유하는 Lisp 변수입니다. 이를 후크 실행이라고합니다. 목록의 개별 기능을 후크의 후크 기능이라고합니다. 예를 들어, 후크 kill-emacs-hook는 Emacs를 종료하기 직전에 실행됩니다 ...

나는 그것이 평가 kill-emacs-hook될 때 실행될 "후크 함수"세트의 목록을 나타내는 변수 (기호)가 있다고 말하면서 kill-emacs-hook그 함수를 수행 한다고 생각 합니다. 옳은? 그때

(add-hook 'text-mode-hook 'auto-fill-mode)

추가되어 auto-fill-mode식별이 목록에 text-mode-hook이미 거기에 무엇을 추가한다. 좋은. 지금

(defcustom text-mode-hook nil
  "Normal hook run when entering Text mode and many related modes."
  :type 'hook
  :options '(turn-on-auto-fill flyspell-mode)
  :group 'wp)

우리가를 생성하거나 변경하는 것처럼 보입니다 text-mode-hook. 나는 이제 후크의 특성과와의 관계에 대해 혼란스러워 defcustom합니다. 내 논리적 선택은이 코드가 text-mode-hook"type"인 변수 를 만드는 것입니다 (elisp의 유형이 무엇을 의미하는지 모름) hook. 실제로 이것은 후크의 초기 생성이어야 text-mode-hook합니까? 그렇다면 "옵션"은 어떻게 되나요? 가정 된 훅 기능입니까, 아니면 다른 것입니까?


1
링크에서 :«: options 키워드는 변수의 제안 된 값 목록을 지정합니다. 일반적으로 : 옵션은 후크에 적용됩니다. 이 목록은 제안 일뿐입니다. 배타적이지 않습니다. 변수를 설정 한 사람은 변수를 다른 값으로 설정할 수 있습니다. : options 키워드 다음에 표시된 목록은 사용자에게 편리한 선택을 제공하기위한 것입니다.»
Sidhekin

답변:


6

후크의 Emacs Lisp 개념에 대한 이해는 절대적으로 정확합니다. 실제로 "정상"후크는 함수 목록 일뿐입니다 (모든 함수는 인수를 취하지 않으며, 그렇지 않으면 일반적으로 Emacs Lisp에서 "후크"또는 "정상 후크"라고하지 않습니다).

이러한 변수는 대부분 이름이으로 끝납니다 -hook. 그것들은에 의해 작동되는 정상적인 고리입니다 run-hooks. 이러한 후크의 가치는 기능의 목록입니다. 함수는 인수없이 호출되며 해당 값은 완전히 무시됩니다. 이러한 훅에 새로운 기능을 추가하는 권장 방법은을 호출하는 것 add-hook입니다.

이름이 끝나는 변수 -functions는 일반적으로 비정상적인 후크입니다 (일부 오래된 코드는 더 이상 사용되지 않는 -hooks접미사를 사용할 수도 있음 ). 해당 값은 함수 목록이지만 이러한 함수는 특별한 방식으로 호출됩니다 (인수가 전달되거나 반환 값이 사용됨). 이름이 끝나는 변수 -function는 단일 기능을 값으로 갖습니다.

사용자 정의 인터페이스는 다릅니다. 사이의 모든 차이 defvardefcustom후자 편집 "사용자 정의"를 통한 인터페이스 변수를 사용자에게 허용한다. 이 인터페이스는 당신이 말을하는지 그래서 만약 예를 들어, 특정 유형의 데이터의 편집을 용이하게 할 수 :typetext-mode-hook입니다 hook, 다음 사용자 정의 인터페이스를 확인합니다text-mode-hook항상 기능의 목록입니다. 또한 인수 와 함께 권장 되는 옵션을 지정할 수 있습니다 :options.

따라서 이해가 정확하고 defcustom옵션이 Emacs에 지시하는 방법 일 뿐이므로 "사용자 정의"인터페이스를 사용할 때 사용자를보다 잘 지원할 수 있습니다.


그러나이 예제는 이미 존재 defcustom하기 때문에 크지 않습니다 text-mode-hook. 이미 포함되어 있습니다. 권리? 이제 자신의 모드를 작성한 다음 사용자 정의를 원하면이 작업을 수행합니다. 내 혼란은이 예제가 실제로 만드는 text-mode-hook것이지 변경하지 않는 것입니다. 이것이 올바른 이해입니까? 이것은 참으로 새를 작성하는 경우 그리고 text-mode-hook는이 :options을 할 수있는 옵션으로 그 두 가지 기능을 제공하고 add-hook오른쪽 목록에?
147pm

@ 147pm,이 예제는 Emacs의 기존 코드의 일부가 후크를 나타내는 사용자 정의 변수를 정의하는 방법을 보여줍니다. 간단히 말해서 defcustom새로운 변수를 정의합니다. 이 특정 예제 text-mode-hook에서 작성되고 초기 값은 nil입니다. 또한 사용자 정의 인터페이스는이 목록에있는 권장 값이 turn-on-auto-fillflyspell-mode입니다. 그러나 text-mode-hook프로그래밍 방식으로 원하는대로 설정할 수 있습니다 . 일반 변수입니다. add-hook다른 기능과도 함께 사용할 수 있습니다 .
Mark Karpov

@ 147, 다시 말해서, 모든 키워드 인수는 사용자 정의 시스템에 대한 힌트 일뿐입니다. 힌트가 없으면 코드에 해당합니다 (defvar text-mode-hook nil).
Mark Karpov

그러나 이것이 defcustom후크가 처음 생성되는 방법입니까? 그것이 어떻게 생겼는지. 즉,이 예는 어딘가에 Emacs 코드의 창자 깊은 곳에서 가져온 것입니다.
147pm

@ 147pm, 맞습니다.
Mark Karpov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.