оценка после загрузки по сравнению с рычагом режима

Есть ли различие между установкой вещей для использования режима eval-after-load и использование рычага режима?

Я видел некоторый код где define-key используется в главном рычаге режима и некотором другом коде где define-key используется в eval-after-load форма.


Обновление:

Для лучшего понимания вот пример использования оценки после загрузки и рычагов режима с org-режимом. Код может работать прежде (load "org") или (require 'org) или (package-initialize).

;; The following two lines of code set some org-mode options.
;; Usually, these can be outside (eval-after-load ...) and work.
;; In cases that doesn't work, try using setq-default or set-variable
;; and putting them in (eval-after-load ...), if the
;; doc for the variables don't say what to do.
;; Or use Customize interface.
(setq org-hide-leading-stars t)
(setq org-return-follows-link t)

;; "org" because C-h f org-mode RET says that org-mode is defined in org.el
(eval-after-load "org"
  '(progn
     ;; Establishing your own keybindings for org-mode.
     ;; Variable org-mode-map is available only after org.el or org.elc is loaded.
     (define-key org-mode-map (kbd "<C-M-return>") 'org-insert-heading-respect-content)
     (define-key org-mode-map (kbd "<M-right>") nil) ; erasing a keybinding.
     (define-key org-mode-map (kbd "<M-left>") nil) ; erasing a keybinding.

     (defun my-org-mode-hook ()
       ;; The following two lines of code is run from the mode hook.
       ;; These are for buffer-specific things.
       ;; In this setup, you want to enable flyspell-mode
       ;; and run org-reveal for every org buffer.
       (flyspell-mode 1)
       (org-reveal))
     (add-hook 'org-mode-hook 'my-org-mode-hook)))
67
задан Yoo 5 February 2012 в 14:39
поделиться

1 ответ

Код, заключенный в eval-after-load , будет выполняться только один раз, поэтому он обычно используется для выполнения одноразовой настройки, например как установка глобальных значений и поведения по умолчанию. Примером может быть настройка раскладки клавиатуры по умолчанию для определенного режима. В коде eval-after-load нет понятия «текущий буфер».

Перехватчики режима выполняются один раз для каждого буфера, в котором включен режим, поэтому они используются для конфигурации каждого буфера. Таким образом, перехватчики режима запускаются позже кода eval-after-load ; это позволяет им выполнять действия на основе такой информации, как то, включены ли другие режимы в текущем буфере.

98
ответ дан 24 November 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: