Mercurial > emacs
view lisp/loadhist.el @ 4092:e72012acb5fb
(gud-debugger-startup): Replaced with gud-massage-args.
(gud-{gdb,sdb,xdb}-debugger-startup): Replaced with gud-*-massage-args.
(gdb, sdb, xdb): Argument is command line, not args for it. Remove
debugger name from prompt and put it in the default input instead.
Overload gud-massage-args instead of gud-debugger-startup.
(gud-chop-words): New function; subr for gud-common-init.
(gud-common-init): Argument is command line, not args for it.
Rewritten to use gud-chop-words instead of temp buffer and kludge involving
read. Find the program name as the first word of the command line.
Use make-comint and gud-massage-args in place of gud-debugger-startup.
Expand the file name before passing it to gud-massage-args.
author | Roland McGrath <roland@gnu.org> |
---|---|
date | Thu, 15 Jul 1993 01:55:13 +0000 |
parents | 9a1b00513968 |
children | 4521917cdd6e |
line wrap: on
line source
;;; loadhist.el --- lisp functions for working with feature groups ;; Author: Eric S. Raymond <esr@snark.thyrsus.com> ;; Version: 1.0 ;; Keywords: internal ;;; Commentary: ;; These functions exploit the load-history system variable. ;; Entry points include `unload-feature', `symbol-file', and `feature-file'. ;;; Code: (defun symbol-file (sym) "Return the input source from which SYM was loaded. This is a file name, or nil if the source was a buffer with no associated file." (catch 'foundit (mapcar (function (lambda (x) (if (memq sym (cdr x)) (throw 'foundit (car x))))) load-history) nil)) (defun feature-symbols (feature) "Return the file and list of symbols associated with a given FEATURE." (catch 'foundit (mapcar (function (lambda (x) (if (member (cons 'provide feature) (cdr x)) (throw 'foundit x)))) load-history) nil)) (defun feature-file (feature) "Return the file name from which a given FEATURE was loaded. Actually, return the load argument, if any; this is sometimes the name of a Lisp file without an extension. If the feature came from an eval-buffer on a buffer with no associated file, or an eval-region, return nil." (if (not (featurep feature)) (error "%s is not a currently loaded feature." (symbol-name feature)) (car (feature-symbols feature)))) (defun file-provides (file) "Return the list of features provided by FILE." (let ((symbols (cdr (assoc file load-history))) (provides nil)) (mapcar (function (lambda (x) (if (and (consp x) (eq (car x) 'provide)) (setq provides (cons (cdr x) provides))))) symbols) provides )) (defun file-requires (file) "Return the list of features required by FILE." (let ((symbols (cdr (assoc file load-history))) (requires nil)) (mapcar (function (lambda (x) (if (and (consp x) (eq (car x) 'require)) (setq requires (cons (cdr x) requires))))) symbols) requires )) (defun set-intersect (p q) ;; Return the set intersection of two lists (let ((ret nil)) (mapcar (function (lambda (x) (if (memq x q) (setq ret (cons x ret))))) p) ret )) (defun file-dependents (file) ;; Return the list of loaded libraries that depend on FILE. (let ((provides (file-provides file)) (dependents nil)) (mapcar (function (lambda (x) (if (set-intersect provides (file-requires (car x))) (setq dependents (cons (car x) dependents))))) load-history) dependents )) ;;;###autoload (defun unload-feature (feature &optional force) "Unload the library that provided FEATURE, restoring all its autoloads. If the feature is required by any other loaded code, and optional FORCE is nil, raise an error." (interactive "SFeature: ") (if (not (featurep feature)) (error "%s is not a currently loaded feature." (symbol-name feature))) (if (not force) (let* ((file (feature-file feature)) (dependents (file-dependents file))) (if dependents (error "Loaded libraries %s depend on %s." (prin1-to-string dependents) file) ))) (let* ((flist (feature-symbols feature)) (file (car flist))) (mapcar (function (lambda (x) (cond ((stringp x) nil) ((boundp x) (makunbound x)) ((fboundp x) (fmakunbound x) (let ((aload (get x 'autoload))) (if aload (fset x aload)))))) ) (cdr flist)))) (provide 'loadhist) ;;; loadhist.el ends here