mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-10 09:43:26 -08:00
eval-after-load fix for bug#10009
* lisp/subr.el (eval-after-load): If FILE is already loaded, evaluate FORM before it gets wrapped in more stuff.
This commit is contained in:
parent
9a4de11022
commit
68cbc58be5
2 changed files with 26 additions and 22 deletions
|
|
@ -1,3 +1,8 @@
|
|||
2011-11-11 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* subr.el (eval-after-load): If FILE is already loaded,
|
||||
evaluate FORM before it gets wrapped in more stuff. (Bug#10009)
|
||||
|
||||
2011-11-10 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* vc/vc-svn.el (vc-svn-create-repo, vc-svn-modify-change-comment):
|
||||
|
|
|
|||
43
lisp/subr.el
43
lisp/subr.el
|
|
@ -1797,30 +1797,29 @@ This function makes or adds to an entry on `after-load-alist'."
|
|||
(push elt after-load-alist))
|
||||
;; Make sure `form' is evalled in the current lexical/dynamic code.
|
||||
(setq form `(funcall ',(eval `(lambda () ,form) lexical-binding)))
|
||||
(when (symbolp regexp-or-feature)
|
||||
;; For features, the after-load-alist elements get run when `provide' is
|
||||
;; called rather than at the end of the file. So add an indirection to
|
||||
;; make sure that `form' is really run "after-load" in case the provide
|
||||
;; call happens early.
|
||||
(setq form
|
||||
`(when load-file-name
|
||||
(let ((fun (make-symbol "eval-after-load-helper")))
|
||||
(fset fun `(lambda (file)
|
||||
(if (not (equal file ',load-file-name))
|
||||
nil
|
||||
(remove-hook 'after-load-functions ',fun)
|
||||
,',form)))
|
||||
(add-hook 'after-load-functions fun)))))
|
||||
;; Add FORM to the element unless it's already there.
|
||||
(unless (member form (cdr elt))
|
||||
(nconc elt (purecopy (list form))))
|
||||
|
||||
;; Is there an already loaded file whose name (or `provide' name)
|
||||
;; matches FILE?
|
||||
(if (if (stringp file)
|
||||
(load-history-filename-element regexp-or-feature)
|
||||
(featurep file))
|
||||
(eval form))))
|
||||
(prog1 (if (if (stringp file)
|
||||
(load-history-filename-element regexp-or-feature)
|
||||
(featurep file))
|
||||
(eval form))
|
||||
(when (symbolp regexp-or-feature)
|
||||
;; For features, the after-load-alist elements get run when `provide' is
|
||||
;; called rather than at the end of the file. So add an indirection to
|
||||
;; make sure that `form' is really run "after-load" in case the provide
|
||||
;; call happens early.
|
||||
(setq form
|
||||
`(when load-file-name
|
||||
(let ((fun (make-symbol "eval-after-load-helper")))
|
||||
(fset fun `(lambda (file)
|
||||
(if (not (equal file ',load-file-name))
|
||||
nil
|
||||
(remove-hook 'after-load-functions ',fun)
|
||||
,',form)))
|
||||
(add-hook 'after-load-functions fun)))))
|
||||
;; Add FORM to the element unless it's already there.
|
||||
(unless (member form (cdr elt))
|
||||
(nconc elt (purecopy (list form)))))))
|
||||
|
||||
(defvar after-load-functions nil
|
||||
"Special hook run after loading a file.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue