11

遇到相关文件扩展名时,是否有关于延迟加载模式的最佳实践?

此时我已经安装了大约 25 种不同的 Emacs 模式,并且启动变得很慢。例如,虽然准备好 clojure-mode 很棒,但我很少使用它,并且我想完全避免加载它,除非我打开扩展名为 .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 新手,所以欢迎发表评论!),但我对在网上找不到任何关于这个主题的文章感到不安。这是一个合理的方法吗?

4

2 回答 2

17

您想要的工具称为自动加载clojure-mode源文件clojure-mode.el包含关于如何安排的注释:

;; 将这些行添加到您的 .emacs 中:
;; (autoload 'clojure-mode "clojure-mode" "A major mode for Clojure" t)
;; (添加到列表 'auto-mode-alist '("\\.clj$" .clojure-mode))
于 2011-08-04T03:48:26.057 回答
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)
于 2011-08-04T10:55:16.887 回答