在遇到相关文件扩展名时,是否有关于延迟加载模式的最佳做法?
此时我安装了大约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新手所以欢迎评论!),但我对在网上找不到关于这个主题的任何内容都感到不安。这是一种合理的方法吗?
答案 0 :(得分:16)
您想要的设施称为autoloading。 clojure-mode
源文件clojure-mode.el包含有关如何安排此内容的注释:
;; Add these lines to your .emacs: ;; (autoload 'clojure-mode "clojure-mode" "A major mode for Clojure" t) ;; (add-to-list 'auto-mode-alist '("\\.clj$" . clojure-mode))
答案 1 :(得分:3)
这是一种方式,
(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)