Mercurial > emacs
annotate lisp/loadhist.el @ 24419:30e478cd167e
(shell-command-default-error-buffer): Renamed from
shell-command-on-region-default-error-buffer.
(shell-command-on-region): Mention in echo area when there
is some error output. Mention success or failure, too.
Accumulate multiple error outputs
going forward, with formfeed in between. Display the error buffer
when we have put something in it.
(shell-command): Add the ERROR-BUFFER argument feature.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Mon, 01 Mar 1999 03:19:32 +0000 |
parents | dc812cd8bd1b |
children | 86d462e378ce |
rev | line source |
---|---|
2543 | 1 ;;; loadhist.el --- lisp functions for working with feature groups |
14169 | 2 |
22459
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
3 ;; Copyright (C) 1995, 1998 Free Software Foundation, Inc. |
2543 | 4 |
5 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com> | |
6 ;; Version: 1.0 | |
7 ;; Keywords: internal | |
8 | |
11289 | 9 ;; This file is part of GNU Emacs. |
10 | |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
13 ;; the Free Software Foundation; either version 2, or (at your option) | |
14 ;; any later version. | |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
14169 | 22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
24 ;; Boston, MA 02111-1307, USA. | |
11289 | 25 |
2543 | 26 ;;; Commentary: |
27 | |
28 ;; These functions exploit the load-history system variable. | |
22459
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
29 ;; Entry points include `unload-feature', `symbol-file', and |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
30 ;; `feature-file', documented in the Emacs Lisp manual. |
2543 | 31 |
32 ;;; Code: | |
33 | |
34 (defun feature-symbols (feature) | |
35 "Return the file and list of symbols associated with a given FEATURE." | |
36 (catch 'foundit | |
37 (mapcar | |
38 (function (lambda (x) | |
39 (if (member (cons 'provide feature) (cdr x)) | |
40 (throw 'foundit x)))) | |
41 load-history) | |
42 nil)) | |
43 | |
44 (defun feature-file (feature) | |
45 "Return the file name from which a given FEATURE was loaded. | |
46 Actually, return the load argument, if any; this is sometimes the name of a | |
47 Lisp file without an extension. If the feature came from an eval-buffer on | |
48 a buffer with no associated file, or an eval-region, return nil." | |
49 (if (not (featurep feature)) | |
12751
f442c14a79c4
(unload-feature): Delete the file's load-history element.
Richard M. Stallman <rms@gnu.org>
parents:
11844
diff
changeset
|
50 (error "%s is not a currently loaded feature" (symbol-name feature)) |
2543 | 51 (car (feature-symbols feature)))) |
52 | |
53 (defun file-provides (file) | |
54 "Return the list of features provided by FILE." | |
55 (let ((symbols (cdr (assoc file load-history))) (provides nil)) | |
56 (mapcar | |
57 (function (lambda (x) | |
58 (if (and (consp x) (eq (car x) 'provide)) | |
59 (setq provides (cons (cdr x) provides))))) | |
60 symbols) | |
61 provides | |
62 )) | |
63 | |
64 (defun file-requires (file) | |
65 "Return the list of features required by FILE." | |
66 (let ((symbols (cdr (assoc file load-history))) (requires nil)) | |
67 (mapcar | |
68 (function (lambda (x) | |
69 (if (and (consp x) (eq (car x) 'require)) | |
70 (setq requires (cons (cdr x) requires))))) | |
71 symbols) | |
72 requires | |
73 )) | |
74 | |
12751
f442c14a79c4
(unload-feature): Delete the file's load-history element.
Richard M. Stallman <rms@gnu.org>
parents:
11844
diff
changeset
|
75 (defun file-set-intersect (p q) |
2543 | 76 ;; Return the set intersection of two lists |
77 (let ((ret nil)) | |
78 (mapcar | |
79 (function (lambda (x) (if (memq x q) (setq ret (cons x ret))))) | |
80 p) | |
81 ret | |
82 )) | |
83 | |
84 (defun file-dependents (file) | |
10498
8fb25f247533
(unload-feature): Don't care if FILE is a dependency of itself.
Richard M. Stallman <rms@gnu.org>
parents:
8108
diff
changeset
|
85 "Return the list of loaded libraries that depend on FILE. |
8fb25f247533
(unload-feature): Don't care if FILE is a dependency of itself.
Richard M. Stallman <rms@gnu.org>
parents:
8108
diff
changeset
|
86 This can include FILE itself." |
2543 | 87 (let ((provides (file-provides file)) (dependents nil)) |
88 (mapcar | |
89 (function (lambda (x) | |
12751
f442c14a79c4
(unload-feature): Delete the file's load-history element.
Richard M. Stallman <rms@gnu.org>
parents:
11844
diff
changeset
|
90 (if (file-set-intersect provides (file-requires (car x))) |
2543 | 91 (setq dependents (cons (car x) dependents))))) |
92 load-history) | |
93 dependents | |
94 )) | |
95 | |
16173
9ba176963a26
(read-feature): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
96 (defun read-feature (prompt) |
22459
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
97 "Read a feature name \(string\) from the minibuffer. |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
98 Prompt with PROMPT and completing from `features', and |
16173
9ba176963a26
(read-feature): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
99 return the feature \(symbol\)." |
9ba176963a26
(read-feature): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
100 (intern (completing-read prompt |
9ba176963a26
(read-feature): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
101 (mapcar (function (lambda (feature) |
9ba176963a26
(read-feature): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
102 (list (symbol-name feature)))) |
9ba176963a26
(read-feature): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
103 features) |
9ba176963a26
(read-feature): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
104 nil t))) |
9ba176963a26
(read-feature): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
105 |
22459
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
106 (defvar loadhist-hook-functions |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
107 '(after-change-function after-change-functions |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
108 after-insert-file-functions auto-fill-function before-change-function |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
109 before-change-functions blink-paren-function |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
110 buffer-access-fontify-functions command-line-functions |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
111 comment-indent-function kill-buffer-query-functions |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
112 kill-emacs-query-functions lisp-indent-function |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
113 redisplay-end-trigger-functions temp-buffer-show-function |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
114 window-scroll-functions window-size-change-functions |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
115 write-region-annotate-functions) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
116 "A list of special hooks from the `Standard Hooks' node of the Lisp manual. |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
117 |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
118 These are symbols with hook-type values whose names don't end in |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
119 `-hook' or `-hooks', from which `unload-feature' tries to remove |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
120 pertinent symbols.") |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
121 |
2543 | 122 ;;;###autoload |
123 (defun unload-feature (feature &optional force) | |
124 "Unload the library that provided FEATURE, restoring all its autoloads. | |
125 If the feature is required by any other loaded code, and optional FORCE | |
126 is nil, raise an error." | |
16173
9ba176963a26
(read-feature): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
127 (interactive (list (read-feature "Feature: "))) |
2543 | 128 (if (not (featurep feature)) |
12751
f442c14a79c4
(unload-feature): Delete the file's load-history element.
Richard M. Stallman <rms@gnu.org>
parents:
11844
diff
changeset
|
129 (error "%s is not a currently loaded feature" (symbol-name feature))) |
2543 | 130 (if (not force) |
10498
8fb25f247533
(unload-feature): Don't care if FILE is a dependency of itself.
Richard M. Stallman <rms@gnu.org>
parents:
8108
diff
changeset
|
131 (let* ((file (feature-file feature)) |
8fb25f247533
(unload-feature): Don't care if FILE is a dependency of itself.
Richard M. Stallman <rms@gnu.org>
parents:
8108
diff
changeset
|
132 (dependents (delete file (copy-sequence (file-dependents file))))) |
2543 | 133 (if dependents |
12751
f442c14a79c4
(unload-feature): Delete the file's load-history element.
Richard M. Stallman <rms@gnu.org>
parents:
11844
diff
changeset
|
134 (error "Loaded libraries %s depend on %s" |
22459
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
135 (prin1-to-string dependents) file)))) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
136 (let* ((flist (feature-symbols feature)) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
137 (file (car flist)) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
138 (unload-hook (intern-soft (concat (symbol-name feature) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
139 "-unload-hook")))) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
140 ;; Try to avoid losing badly when hooks installed in critical |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
141 ;; places go away. (Some packages install things on |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
142 ;; `kill-buffer-hook', `activate-menubar-hook' and the like.) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
143 ;; First off, provide a clean way for package `foo' to arrange |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
144 ;; this by defining `foo-unload-hook'. |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
145 (if unload-hook |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
146 (run-hooks unload-hook) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
147 ;; Otherwise, do our best. Look through the obarray for symbols |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
148 ;; which seem to be hook variables or special hook functions and |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
149 ;; remove anything from them which matches the feature-symbols |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
150 ;; about to get zapped. Obviously this won't get anonymous |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
151 ;; functions which the package might just have installed, and |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
152 ;; there might be other important state, but this tactic |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
153 ;; normally works. |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
154 (mapatoms |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
155 (lambda (x) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
156 (if (or (and (boundp x) ; Random hooks. |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
157 (consp (symbol-value x)) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
158 (string-match "-hooks?\\'" (symbol-name x))) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
159 (and (fboundp x) ; Known abnormal hooks etc. |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
160 (memq x loadhist-hook-functions))) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
161 (mapcar (lambda (y) (remove-hook x y)) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
162 (cdr flist)))))) |
2543 | 163 (mapcar |
22459
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
164 (lambda (x) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
165 (cond ((stringp x) nil) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
166 ((consp x) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
167 ;; Remove any feature names that this file provided. |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
168 (if (eq (car x) 'provide) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
169 (setq features (delq (cdr x) features)))) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
170 ((boundp x) (makunbound x)) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
171 ((fboundp x) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
172 (fmakunbound x) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
173 (let ((aload (get x 'autoload))) |
bc88a299d2fc
(read-feature): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16173
diff
changeset
|
174 (if aload (fset x (cons 'autoload aload))))))) |
12751
f442c14a79c4
(unload-feature): Delete the file's load-history element.
Richard M. Stallman <rms@gnu.org>
parents:
11844
diff
changeset
|
175 (cdr flist)) |
f442c14a79c4
(unload-feature): Delete the file's load-history element.
Richard M. Stallman <rms@gnu.org>
parents:
11844
diff
changeset
|
176 ;; Delete the load-history element for this file. |
f442c14a79c4
(unload-feature): Delete the file's load-history element.
Richard M. Stallman <rms@gnu.org>
parents:
11844
diff
changeset
|
177 (let ((elt (assoc file load-history))) |
f442c14a79c4
(unload-feature): Delete the file's load-history element.
Richard M. Stallman <rms@gnu.org>
parents:
11844
diff
changeset
|
178 (setq load-history (delq elt load-history))))) |
2543 | 179 |
180 (provide 'loadhist) | |
181 | |
182 ;;; loadhist.el ends here |