请问“;;;###autoload”这个东西是普通的注释吗?


#1

在一些第三方包的源码里经常会看到 ;;;###autoload,比方说:racket-mode.el里:

;;;###autoload
(define-derived-mode racket-mode prog-mode
  "Racket"
  "Major mode for editing Racket.
\\{racket-mode-map}"
  (racket--common-variables)
  (racket--variables-imenu)
  (hs-minor-mode t))

;;;###autoload
(progn
  (add-to-list 'auto-mode-alist '("\\.rkt[dl]?\\'" . racket-mode))
  (modify-coding-system-alist 'file "\\.rkt[dl]?\\'"  'utf-8)
  (add-to-list 'interpreter-mode-alist '("racket" . racket-mode)))

这两个 ;;;###autoload是普通的注释吗?

它有什么用?

如果删掉它们有什么问题?(假如是一个自己写的mode,也要用模仿着它们加上 ;;;###autoload吗?)


#2

在elisp manual里面有详细介绍,这个 ;;;###autoload 是一个magic comment, 他让下面的defun 在没有加载这个包的时候也能用。这样用户的config里面可以引用很多包但是不需要加载他们。

这个autoload对正确配置的包(比方通过package.el) 才有用,自己用的script不需要。


#3

明白了,多谢。

挺surprise的,不过还好自己做的脚本不需要关注这些东西。