Emacs: загружать только необходимые яснипец

Предположим, у меня есть 2 подкаталога для яснипетов:

~/.emacs.d/yasnippets/perl-mode
~/.emacs.d/yasnippets/php-mode

В настоящее время я использую следующий код в моем.emacs:

(defvar *my-emacs-lib-dir* "~/.emacs.d/")
(load (concat *my-emacs-lib-dir* "plugins/yasnippet/yasnippet"))
(setq yas/snippet-dirs nil)
(yas/initialize)

;; Develop and keep personal snippets under ~/emacs.d/yasnippets
(setq yas/root-directory (concat *my-emacs-lib-dir* "yasnippets"))
(yas/load-directory yas/root-directory)

Таким образом, он загружает все yasnippets во всех подкаталогах ~/.emacs.d/yasnippets.

Можно ли заставить его загружать яснипеты по требованию? Если я открываю файл php, и фрагменты для режима php не загружаются, загружайте их. Но не загружайте все при запуске.

2 ответа

Решение

Если я правильно помню, в свежих версиях загрузка фрагментов будет выполняться по запросу, если вы будете использовать рекомендуемую последовательность загрузки:

(add-to-list 'load-path "~/path-to-yasnippet")
(require 'yasnippet)
(yas-global-mode 1)

Вы также можете использовать дополнительный use-jit флаг к yas-load-directory функция, которая заставит загружать фрагменты из этого каталога по требованию. Смотрите описание этой функции (C-h f yas-load-directory)

Может быть, что-то подобное может работать.

(defvar yas/loaded-php-snippets nil)

(defun yas/load-php-snippets()
   (if (not yas/loaded-php-snippets)
    (progn
      (yas/load-directory  (concat yas/root-directory) "/php-mode")
      (setq yas/loaded-php-snippets t))))

(add-hook 'php-mode-hook 'yas/loaded-php-snippets)

Это всего лишь пример, но можно предположить, что есть карта между ловушками режимов и каталогами загрузки yas, и просто можно загружать определенные каталоги, если они еще не загружены.

Другие вопросы по тегам