Emacs: Наилучшая практика для ленивых режимов загрузки в.emacs?
Есть ли лучшая практика в отношении режимов ленивой загрузки при обнаружении соответствующего расширения файла?
На данный момент у меня установлено около 25 различных режимов Emacs, и запуск стал медленным. Например, хотя хорошо иметь clojure-режим наготове, я редко им пользуюсь и хочу вообще не загружать его, если я не открою файл с расширением.clj. Такая функциональность "ленивый запрос" в целом кажется правильным способом настройки режима.
Я ничего не нашел в Интернете, поэтому я сам взломал это.
Вместо:
(require 'clojure-mode)
(require 'tpl-mode)
У меня есть это:
(defun lazy-require (ext mode)
(add-hook
'find-file-hook
`(lambda ()
(when (and (stringp buffer-file-name)
(string-match (concat "\\." ,ext "\\'") buffer-file-name))
(require (quote ,mode))
(,mode)))))
(lazy-require "soy" 'soy-mode)
(lazy-require "tpl" 'tpl-mode)
Кажется, это работает (я новичок в elisp, так что комментарии приветствуются!), Но я нервничаю из-за того, что ничего не написал по этой теме онлайн Это разумный подход?
2 ответа
Объект, который вы хотите, называется автозагрузкой. clojure-mode
Исходный файл clojure-mode.el содержит комментарий о том, как это устроить:
;; Добавьте эти строки в ваш.emacs:;; (автозагрузка 'clojure-mode "clojure-mode" "Основной режим для Clojure" t);; (добавить в список 'auto-mode-alist '("\\.clj$" . clojure-mode))
Это один из способов,
(provide 'my-slime)
(eval-after-load "slime"
'(progn
(setq slime-lisp-implementations
'((sbcl ("/usr/bin/sbcl"))
(clisp ("/usr/bin/clisp")))
common-lisp-hyperspec-root "/home/sujoy/documents/hyperspec/")
(slime-setup '(slime-asdf
slime-autodoc
slime-editing-commands
slime-fancy-inspector
slime-fontifying-fu
slime-fuzzy
slime-indentation
slime-mdot-fu
slime-package-fu
slime-references
slime-repl
slime-sbcl-exts
slime-scratch
slime-xref-browser))
(slime-autodoc-mode)
(setq slime-complete-symbol*-fancy t)
(setq slime-complete-symbol-function 'slime-fuzzy-complete-symbol)
(add-hook 'lisp-mode-hook (lambda () (slime-mode t)))))
(require 'slime)
вместе с,
;; slime mode
(autoload 'slime "my-slime" "Slime mode." t)
(autoload 'slime-connect "my-slime" "Slime mode." t)