;;; loadhist.el --- lisp functions for working with feature groups
-;; Copyright (C) 1995, 1998, 2000, 2002, 2003, 2004,
-;; 2005 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1998, 2000, 2001, 2002, 2003, 2004,
+;; 2005, 2006, 2007 Free Software Foundation, Inc.
;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
;; Maintainer: FSF
;;; Code:
+(eval-when-compile (require 'cl))
+
(defun feature-symbols (feature)
"Return the file and list of definitions associated with FEATURE.
The value is actually the element of `load-history'
(let ((symbols (assoc file load-history)))
;; Try converting a library name to an absolute file name.
(and (null symbols)
- (let ((absname
- (locate-file file load-path load-suffixes)))
+ (let ((absname
+ (locate-file file load-path (get-load-suffixes))))
(and absname (not (equal absname file))
(setq symbols (cdr (assoc absname load-history))))))
symbols))
(mapcar (lambda (feature)
(list (symbol-name feature)))
features)
- nil t)))
+ ;; Complete only features loaded from a file
+ #'(lambda (f) (feature-file (intern (car f))))
+ t)))
(defvaralias 'loadhist-hook-functions 'unload-feature-special-hooks)
(defvar unload-feature-special-hooks
(elp-restore-function elt))))
(dolist (x unload-hook-features-list)
(if (consp x)
- (cond
+ (case (car x)
;; Remove any feature names that this file provided.
- ((eq (car x) 'provide)
+ (provide
(setq features (delq (cdr x) features)))
- ((eq (car x) 'defun)
+ ((defun autoload)
(let ((fun (cdr x)))
(when (fboundp fun)
(when (fboundp 'ad-unadvise)
(ad-unadvise fun))
- (fmakunbound fun)
(let ((aload (get fun 'autoload)))
- (when aload
- (fset fun (cons 'autoload aload))))))))
+ (if aload
+ (fset fun (cons 'autoload aload))
+ (fmakunbound fun))))))
+ ((t require defface) nil)
+ (t (message "Unexpected element %s in load-history" x)))
;; Kill local values as much as possible.
(dolist (buf (buffer-list))
(with-current-buffer buf
+ (if (and (boundp x) (timerp (symbol-value x)))
+ (cancel-timer (symbol-value x)))
(kill-local-variable x)))
+ (if (and (boundp x) (timerp (symbol-value x)))
+ (cancel-timer (symbol-value x)))
;; Get rid of the default binding if we can.
(unless (local-variable-if-set-p x)
(makunbound x))))
;; Delete the load-history element for this file.
- (setq load-history (delq (assoc file load-history) load-history))))
+ (setq load-history (delq (assoc file load-history) load-history)))
+ ;; Don't return load-history, it is not useful.
+ nil)
(provide 'loadhist)
-;;; arch-tag: 70bb846a-c413-4f01-bf88-78dba4ac0798
+;; arch-tag: 70bb846a-c413-4f01-bf88-78dba4ac0798
;;; loadhist.el ends here