簡體   English   中英

emacs23 / elisp:如何正確自動加載這個庫?

[英]emacs23 / elisp: how to properly autoload this library?

我正在升級到emacs23。 我發現我的emacs.el加載速度要慢得多。

真的是我自己的錯......那里有很多東西。

所以我也試圖自動加載我的emacs.el目前“必需”的一切可能。

我有一個公開12個入口點的模塊 - 我可以調用的交互式功能。

是否有正確的方法有12個autoload調用,以確保模塊加載,無論我調用哪個函數? 這種方法有什么問題嗎? 它會出現性能問題嗎?

如果沒有這種方法,那又怎樣?

您真正想要的是自動為您生成自動加載,以便您的.emacs文件保持原始狀態。 大多數軟件包已經包含;;;###autoload行,如果沒有,您可以輕松添加它們。

要管理它,您可以將所有軟件包放在一個目錄中,比如~/emacs/lisp ,並且有一個名為update-auto-loads.el的文件,其中包含:

;; put this path into the load-path automatically
;;;###autoload
(progn
  (setq load-path (cons (file-name-directory load-file-name) load-path)))

;;;###autoload
(defun update-autoloads-in-package-area (&optional file)
  "Update autoloads for files in the diretory containing this file."
  (interactive)
  (let ((base (file-truename
       (file-name-directory
        (symbol-file 'update-autoloads-in-package-area 'defun)))))
(require 'autoload)         ;ironic, i know
(let ((generated-autoload-file (concat base "loaddefs.el")))
  (when (not (file-exists-p generated-autoload-file))
    (with-current-buffer (find-file-noselect generated-autoload-file)
      (insert ";;") ;; create the file with non-zero size to appease autoload
      (save-buffer)))
  (cd base)
  (if file
      (update-file-autoloads file)
    (update-autoloads-from-directories base)))))

;;;###autoload
(defun update-autoloads-for-file-in-package-area (file)
  (interactive "f")
  (update-autoloads-in-package-area file))

如果將'update-autoloads-in-package-areakill-emacs-hook ,則每次退出Emacs時都會自動更新loaddefs.el

並且,要將它們組合在一起,請將其添加到.emacs

(load-file "~/emacs/lisp/loaddefs.el")

現在,當您下載新軟件包時,只需將其保存在~/emacs/lisp目錄中,通過Mx update-autoloads-in-package-area (或退出emacs)更新loaddef,它將在下次可用你運行Emacs。 不再對.emacs進行更改以加載內容。

有關加速Emacs啟動的其他替代方案,請參閱此問題: 如何讓Emacs啟動更快?

嗯,誰在乎它開始的緩慢程度?

通過emacs --daemon &啟動它,然后使用其中一個連接

  • emacsclient -c /some/file.ext ,或
  • emacsclient -nw

我分別為emxemt創建了這些別名。 繼續一次編輯會議是如此理智...

理想情況下,您的.emacs文件中不應有任何loadrequire

你應該使用autoload ...

例如

(autoload 'slime-selector "slime" t)

您將需要使用eval-after-load來執行任何特定於庫的配置,但結果是您不需要等待所有這些都在前面加載,或者導致錯誤的Emacs版本沒有相同的功能。 (例如基於終端,或不同的平台等)

雖然現在這可能不會對您產生影響,但是將來您可能希望在使用Emacs的所有機器/環境中使用相同的配置,因此准備好配置是一件非常好的事情。

還可以使用(start-server)使用emacsclient外部文件打開到Emacs中 - 這樣就可以避免重新啟動Emacs。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM