From 838ff458025f7d59d5f9485363e9834f5a5dc063 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 15 Sep 2009 03:39:40 +0000 Subject: [PATCH] (after-load-functions): New hook. (do-after-load-evaluation): Run it. Use string-match-p to detect `obsolete' packages, rather than painfully extracting the relevant directory name. --- etc/NEWS | 2 ++ lisp/ChangeLog | 7 +++++++ lisp/subr.el | 13 +++++++++---- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 3339915e2ba..3db3f5342ad 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -210,6 +210,8 @@ functions and variables. * Lisp changes in Emacs 23.2 +** New hook `after-load-functions' run after loading an Elisp file. + ** You can control which binding is preferentially shown in menus and docstrings by adding a `:advertised-binding' property to the corresponding command's symbol. That property can hold a single binding or a list diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a40aa7a932f..5b52b49ef78 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2009-09-15 Stefan Monnier + + * subr.el (after-load-functions): New hook. + (do-after-load-evaluation): Run it. Use string-match-p to detect + `obsolete' packages, rather than painfully extracting the relevant + directory name. + 2009-09-15 Glenn Morris * apropos.el (apropos-documentation-check-doc-file): Avoid assignment to diff --git a/lisp/subr.el b/lisp/subr.el index 85a74183a8d..560ab5695bd 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1670,6 +1670,11 @@ This function makes or adds to an entry on `after-load-alist'." (featurep file)) (eval form)))) +(defvar after-load-functions nil + "Special hook run after loading a file. +Each function there is called with a single argument, the absolute +name of the file just loaded.") + (defun do-after-load-evaluation (abs-file) "Evaluate all `eval-after-load' forms, if any, for ABS-FILE. ABS-FILE, a string, should be the absolute true name of a file just loaded. @@ -1682,15 +1687,15 @@ This function is called directly from the C code." (mapc #'eval (cdr a-l-element)))) after-load-alist) ;; Complain when the user uses obsolete files. - (when (equal "obsolete" - (file-name-nondirectory - (directory-file-name (file-name-directory abs-file)))) + (when (string-match-p "/obsolete/[^/]*\\'" abs-file) (run-with-timer 0 nil (lambda (file) (message "Package %s is obsolete!" (substring file 0 (string-match "\\.elc?\\>" file)))) - (file-name-nondirectory abs-file)))) + (file-name-nondirectory abs-file))) + ;; Finally, run any other hook. + (run-hook-with-args 'after-load-functions abs-file)) (defun eval-next-after-load (file) "Read the following input sexp, and run it whenever FILE is loaded. -- 2.39.5