Mercurial > emacs
annotate lisp/emacs-lisp/autoload.el @ 14147:4d7b8a3fe240
Describe version-specific site-lisp dirs.
Capitalize Lisp.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 11 Jan 1996 17:05:41 +0000 |
parents | 1c331f9332ae |
children | 83f275dcd93a |
rev | line source |
---|---|
662
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
648
diff
changeset
|
1 ;;; autoload.el --- maintain autoloads in loaddefs.el. |
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
648
diff
changeset
|
2 |
13937
35c457f8bedf
(generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents:
13730
diff
changeset
|
3 ;;; Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. |
473 | 4 ;;; |
846
20674ae6bf52
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
811
diff
changeset
|
5 ;; Author: Roland McGrath <roland@gnu.ai.mit.edu> |
2247
2c7997f249eb
Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1975
diff
changeset
|
6 ;; Keywords: maint |
846
20674ae6bf52
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
811
diff
changeset
|
7 |
473 | 8 ;;; This program is free software; you can redistribute it and/or modify |
9 ;;; it under the terms of the GNU General Public License as published by | |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
732
diff
changeset
|
10 ;;; the Free Software Foundation; either version 2, or (at your option) |
473 | 11 ;;; any later version. |
12 ;;; | |
13 ;;; This program is distributed in the hope that it will be useful, | |
14 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 ;;; GNU General Public License for more details. | |
17 ;;; | |
18 ;;; A copy of the GNU General Public License can be obtained from this | |
19 ;;; program's author (send electronic mail to roland@ai.mit.edu) or from | |
20 ;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA | |
21 ;;; 02139, USA. | |
22 ;;; | |
23 | |
7942 | 24 ;;; Commentary: |
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
25 |
7437 | 26 ;; This code helps GNU Emacs maintainers keep the loaddefs.el file up to |
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
27 ;; date. It interprets magic cookies of the form ";;;###autoload" in |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
28 ;; lisp source files in various useful ways. To learn more, read the |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
29 ;; source; if you're going to use this, you'd better be able to. |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
30 |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
732
diff
changeset
|
31 ;;; Code: |
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
732
diff
changeset
|
32 |
473 | 33 (defun make-autoload (form file) |
34 "Turn FORM, a defun or defmacro, into an autoload for source file FILE. | |
12500
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
35 Returns nil if FORM is not a defun, define-skeleton or defmacro." |
473 | 36 (let ((car (car-safe form))) |
12500
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
37 (if (memq car '(defun define-skeleton defmacro)) |
3777
d6f56b9586f7
(make-autoload): Use memq once instead eq twice.
Roland McGrath <roland@gnu.org>
parents:
3774
diff
changeset
|
38 (let ((macrop (eq car 'defmacro)) |
d6f56b9586f7
(make-autoload): Use memq once instead eq twice.
Roland McGrath <roland@gnu.org>
parents:
3774
diff
changeset
|
39 name doc) |
12500
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
40 (setq form (cdr form) |
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
41 name (car form) |
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
42 ;; Ignore the arguments. |
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
43 form (cdr (if (eq car 'define-skeleton) |
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
44 form |
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
45 (cdr form))) |
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
46 doc (car form)) |
473 | 47 (if (stringp doc) |
48 (setq form (cdr form)) | |
49 (setq doc nil)) | |
50 (list 'autoload (list 'quote name) file doc | |
12500
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
51 (or (eq car 'define-skeleton) |
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
52 (eq (car-safe (car form)) 'interactive)) |
1552
f2901040a07b
* autoload.el (make-autoload): When creating an autoload
Jim Blandy <jimb@redhat.com>
parents:
1108
diff
changeset
|
53 (if macrop (list 'quote 'macro) nil))) |
473 | 54 nil))) |
55 | |
12500
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
56 (put 'define-skeleton 'doc-string-elt 3) |
6aba36eda051
(make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents:
8864
diff
changeset
|
57 |
473 | 58 (defconst generate-autoload-cookie ";;;###autoload" |
3774
3b0cb275ca29
(generate-autoload-cookie, update-autoloads-here): Doc fixes.
Roland McGrath <roland@gnu.org>
parents:
2535
diff
changeset
|
59 "Magic comment indicating the following form should be autoloaded. |
3b0cb275ca29
(generate-autoload-cookie, update-autoloads-here): Doc fixes.
Roland McGrath <roland@gnu.org>
parents:
2535
diff
changeset
|
60 Used by \\[update-file-autoloads]. This string should be |
473 | 61 meaningless to Lisp (e.g., a comment). |
62 | |
63 This string is used: | |
64 | |
65 ;;;###autoload | |
66 \(defun function-to-be-autoloaded () ...) | |
67 | |
68 If this string appears alone on a line, the following form will be | |
69 read and an autoload made for it. If there is further text on the line, | |
70 that text will be copied verbatim to `generated-autoload-file'.") | |
71 | |
72 (defconst generate-autoload-section-header "\f\n;;;### " | |
73 "String inserted before the form identifying | |
74 the section of autoloads for a file.") | |
75 | |
76 (defconst generate-autoload-section-trailer "\n;;;***\n" | |
77 "String which indicates the end of the section of autoloads for a file.") | |
78 | |
727 | 79 ;;; Forms which have doc-strings which should be printed specially. |
80 ;;; A doc-string-elt property of ELT says that (nth ELT FORM) is | |
81 ;;; the doc-string in FORM. | |
82 ;;; | |
83 ;;; There used to be the following note here: | |
84 ;;; ;;; Note: defconst and defvar should NOT be marked in this way. | |
85 ;;; ;;; We don't want to produce defconsts and defvars that | |
86 ;;; ;;; make-docfile can grok, because then it would grok them twice, | |
87 ;;; ;;; once in foo.el (where they are given with ;;;###autoload) and | |
88 ;;; ;;; once in loaddefs.el. | |
89 ;;; | |
90 ;;; Counter-note: Yes, they should be marked in this way. | |
91 ;;; make-docfile only processes those files that are loaded into the | |
92 ;;; dumped Emacs, and those files should never have anything | |
93 ;;; autoloaded here. The above-feared problem only occurs with files | |
94 ;;; which have autoloaded entries *and* are processed by make-docfile; | |
95 ;;; there should be no such files. | |
96 | |
473 | 97 (put 'autoload 'doc-string-elt 3) |
727 | 98 (put 'defun 'doc-string-elt 3) |
99 (put 'defvar 'doc-string-elt 3) | |
100 (put 'defconst 'doc-string-elt 3) | |
101 (put 'defmacro 'doc-string-elt 3) | |
473 | 102 |
5837
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
103 (defun autoload-trim-file-name (file) |
7477
a01cc9d6398d
(autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents:
7472
diff
changeset
|
104 ;; Returns a relative pathname of FILE |
a01cc9d6398d
(autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents:
7472
diff
changeset
|
105 ;; starting from the directory that loaddefs.el is in. |
a01cc9d6398d
(autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents:
7472
diff
changeset
|
106 ;; That is normally a directory in load-path, |
a01cc9d6398d
(autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents:
7472
diff
changeset
|
107 ;; which means Emacs will be able to find FILE when it looks. |
a01cc9d6398d
(autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents:
7472
diff
changeset
|
108 ;; Any extra directory names here would prevent finding the file. |
5837
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
109 (setq file (expand-file-name file)) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
110 (file-relative-name file |
7477
a01cc9d6398d
(autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents:
7472
diff
changeset
|
111 (file-name-directory generated-autoload-file))) |
5837
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
112 |
473 | 113 (defun generate-file-autoloads (file) |
114 "Insert at point a loaddefs autoload section for FILE. | |
115 autoloads are generated for defuns and defmacros in FILE | |
2494
c0fbbfadcb04
(generate-file-autoloads): Doc fix.
Roland McGrath <roland@gnu.org>
parents:
2307
diff
changeset
|
116 marked by `generate-autoload-cookie' (which see). |
473 | 117 If FILE is being visited in a buffer, the contents of the buffer |
118 are used." | |
119 (interactive "fGenerate autoloads for file: ") | |
120 (let ((outbuf (current-buffer)) | |
121 (autoloads-done '()) | |
122 (load-name (let ((name (file-name-nondirectory file))) | |
123 (if (string-match "\\.elc?$" name) | |
124 (substring name 0 (match-beginning 0)) | |
125 name))) | |
126 (print-length nil) | |
5837
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
127 (print-readably t) ; This does something in Lucid Emacs. |
4555
434ef4c2fda7
(generate-file-autoloads): Set float-output-format to
Richard M. Stallman <rms@gnu.org>
parents:
4215
diff
changeset
|
128 (float-output-format nil) |
473 | 129 (done-any nil) |
1884
4a8bc12e7017
(generate-file-autoloads): If no buffer was visiting FILE when we started,
Roland McGrath <roland@gnu.org>
parents:
1552
diff
changeset
|
130 (visited (get-file-buffer file)) |
473 | 131 output-end) |
727 | 132 |
133 ;; If the autoload section we create here uses an absolute | |
134 ;; pathname for FILE in its header, and then Emacs is installed | |
135 ;; under a different path on another system, | |
136 ;; `update-autoloads-here' won't be able to find the files to be | |
137 ;; autoloaded. So, if FILE is in the same directory or a | |
732 | 138 ;; subdirectory of the current buffer's directory, we'll make it |
727 | 139 ;; relative to the current buffer's directory. |
140 (setq file (expand-file-name file)) | |
4089
410395998370
(generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents:
4068
diff
changeset
|
141 (let* ((source-truename (file-truename file)) |
410395998370
(generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents:
4068
diff
changeset
|
142 (dir-truename (file-name-as-directory |
410395998370
(generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents:
4068
diff
changeset
|
143 (file-truename default-directory))) |
410395998370
(generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents:
4068
diff
changeset
|
144 (len (length dir-truename))) |
410395998370
(generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents:
4068
diff
changeset
|
145 (if (and (< len (length source-truename)) |
410395998370
(generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents:
4068
diff
changeset
|
146 (string= dir-truename (substring source-truename 0 len))) |
410395998370
(generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents:
4068
diff
changeset
|
147 (setq file (substring source-truename len)))) |
727 | 148 |
473 | 149 (message "Generating autoloads for %s..." file) |
1975
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
150 (save-excursion |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
151 (unwind-protect |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
152 (progn |
13730
87eb8f956a00
(generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents:
12500
diff
changeset
|
153 (if visited |
87eb8f956a00
(generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents:
12500
diff
changeset
|
154 (set-buffer visited) |
87eb8f956a00
(generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents:
12500
diff
changeset
|
155 ;; It is faster to avoid visiting the file. |
87eb8f956a00
(generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents:
12500
diff
changeset
|
156 (set-buffer (get-buffer-create " *generate-autoload-file*")) |
87eb8f956a00
(generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents:
12500
diff
changeset
|
157 (kill-all-local-variables) |
87eb8f956a00
(generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents:
12500
diff
changeset
|
158 (erase-buffer) |
14043
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
159 (setq buffer-undo-list t |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
160 buffer-read-only nil) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
161 (emacs-lisp-mode) |
13730
87eb8f956a00
(generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents:
12500
diff
changeset
|
162 (insert-file-contents file nil)) |
1975
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
163 (save-excursion |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
164 (save-restriction |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
165 (widen) |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
166 (goto-char (point-min)) |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
167 (while (not (eobp)) |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
168 (skip-chars-forward " \t\n\f") |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
169 (cond |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
170 ((looking-at (regexp-quote generate-autoload-cookie)) |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
171 (search-forward generate-autoload-cookie) |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
172 (skip-chars-forward " \t") |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
173 (setq done-any t) |
5854
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
174 (if (eolp) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
175 ;; Read the next form and make an autoload. |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
176 (let* ((form (prog1 (read (current-buffer)) |
6280
54968237a1ac
(generate-file-autoloads): Don't ignore the line
Richard M. Stallman <rms@gnu.org>
parents:
6184
diff
changeset
|
177 (or (bolp) (forward-line 1)))) |
5854
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
178 (autoload (make-autoload form load-name)) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
179 (doc-string-elt (get (car-safe form) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
180 'doc-string-elt))) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
181 (if autoload |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
182 (setq autoloads-done (cons (nth 1 form) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
183 autoloads-done)) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
184 (setq autoload form)) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
185 (if (and doc-string-elt |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
186 (stringp (nth doc-string-elt autoload))) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
187 ;; We need to hack the printing because the |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
188 ;; doc-string must be printed specially for |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
189 ;; make-docfile (sigh). |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
190 (let* ((p (nthcdr (1- doc-string-elt) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
191 autoload)) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
192 (elt (cdr p))) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
193 (setcdr p nil) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
194 (princ "\n(" outbuf) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
195 (let ((print-escape-newlines t)) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
196 (mapcar (function (lambda (elt) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
197 (prin1 elt outbuf) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
198 (princ " " outbuf))) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
199 autoload)) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
200 (princ "\"\\\n" outbuf) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
201 (let ((begin (save-excursion |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
202 (set-buffer outbuf) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
203 (point)))) |
1975
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
204 (princ (substring |
5837
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
205 (prin1-to-string (car elt)) 1) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
206 outbuf) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
207 ;; Insert a backslash before each ( that |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
208 ;; appears at the beginning of a line in |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
209 ;; the doc string. |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
210 (save-excursion |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
211 (set-buffer outbuf) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
212 (save-excursion |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
213 (while (search-backward "\n(" begin t) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
214 (forward-char 1) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
215 (insert "\\")))) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
216 (if (null (cdr elt)) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
217 (princ ")" outbuf) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
218 (princ " " outbuf) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
219 (princ (substring |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
220 (prin1-to-string (cdr elt)) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
221 1) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
222 outbuf)) |
5854
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
223 (terpri outbuf))) |
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
224 (let ((print-escape-newlines t)) |
6184
f18b10850c00
(generate-file-autoloads): Move misplaced paren in match clause of cond
Roland McGrath <roland@gnu.org>
parents:
5854
diff
changeset
|
225 (print autoload outbuf)))) |
5854
9d1ae808403b
(generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents:
5843
diff
changeset
|
226 ;; Copy the rest of the line to the output. |
13937
35c457f8bedf
(generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents:
13730
diff
changeset
|
227 (princ (buffer-substring |
35c457f8bedf
(generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents:
13730
diff
changeset
|
228 (progn |
35c457f8bedf
(generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents:
13730
diff
changeset
|
229 ;; Back up over whitespace, to preserve it. |
35c457f8bedf
(generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents:
13730
diff
changeset
|
230 (skip-chars-backward " \f\t") |
35c457f8bedf
(generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents:
13730
diff
changeset
|
231 (if (= (char-after (1+ (point))) ? ) |
35c457f8bedf
(generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents:
13730
diff
changeset
|
232 ;; Eat one space. |
35c457f8bedf
(generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents:
13730
diff
changeset
|
233 (forward-char 1)) |
35c457f8bedf
(generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents:
13730
diff
changeset
|
234 (point)) |
35c457f8bedf
(generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents:
13730
diff
changeset
|
235 (progn (forward-line 1) (point))) |
35c457f8bedf
(generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents:
13730
diff
changeset
|
236 outbuf))) |
5837
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
237 ((looking-at ";") |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
238 ;; Don't read the comment. |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
239 (forward-line 1)) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
240 (t |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
241 (forward-sexp 1) |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
242 (forward-line 1))))))) |
1975
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
243 (or visited |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
244 ;; We created this buffer, so we should kill it. |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
245 (kill-buffer (current-buffer))) |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
246 (set-buffer outbuf) |
3334e2489824
* autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents:
1884
diff
changeset
|
247 (setq output-end (point-marker)))) |
473 | 248 (if done-any |
249 (progn | |
250 (insert generate-autoload-section-header) | |
5837
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
251 (prin1 (list 'autoloads autoloads-done load-name |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
252 (autoload-trim-file-name file) |
473 | 253 (nth 5 (file-attributes file))) |
254 outbuf) | |
255 (terpri outbuf) | |
5837
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
256 (insert ";;; Generated autoloads from " |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
257 (autoload-trim-file-name file) "\n") |
8864
65731429a2c1
(generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents:
7942
diff
changeset
|
258 ;; Warn if we put a line in loaddefs.el |
65731429a2c1
(generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents:
7942
diff
changeset
|
259 ;; that is long enough to cause trouble. |
65731429a2c1
(generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents:
7942
diff
changeset
|
260 (while (< (point) output-end) |
65731429a2c1
(generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents:
7942
diff
changeset
|
261 (let ((beg (point))) |
65731429a2c1
(generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents:
7942
diff
changeset
|
262 (end-of-line) |
65731429a2c1
(generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents:
7942
diff
changeset
|
263 (if (> (- (point) beg) 900) |
65731429a2c1
(generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents:
7942
diff
changeset
|
264 (progn |
65731429a2c1
(generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents:
7942
diff
changeset
|
265 (message "A line is too long--over 900 characters") |
65731429a2c1
(generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents:
7942
diff
changeset
|
266 (sleep-for 2) |
65731429a2c1
(generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents:
7942
diff
changeset
|
267 (goto-char output-end)))) |
65731429a2c1
(generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents:
7942
diff
changeset
|
268 (forward-line 1)) |
473 | 269 (goto-char output-end) |
270 (insert generate-autoload-section-trailer))) | |
271 (message "Generating autoloads for %s...done" file))) | |
2535
86d5500624d5
(update-file-autoloads, update-directory-autoloads): If called
Roland McGrath <roland@gnu.org>
parents:
2494
diff
changeset
|
272 |
473 | 273 (defconst generated-autoload-file "loaddefs.el" |
274 "*File \\[update-file-autoloads] puts autoloads into. | |
275 A .el file can set this in its local variables section to make its | |
276 autoloads go somewhere else.") | |
277 | |
278 ;;;###autoload | |
279 (defun update-file-autoloads (file) | |
280 "Update the autoloads for FILE in `generated-autoload-file' | |
281 \(which FILE might bind in its local variables)." | |
282 (interactive "fUpdate autoloads for file: ") | |
283 (let ((load-name (let ((name (file-name-nondirectory file))) | |
284 (if (string-match "\\.elc?$" name) | |
285 (substring name 0 (match-beginning 0)) | |
286 name))) | |
5815
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
287 (found nil) |
473 | 288 (existing-buffer (get-file-buffer file))) |
289 (save-excursion | |
290 ;; We want to get a value for generated-autoload-file from | |
291 ;; the local variables section if it's there. | |
14043
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
292 (if existing-buffer |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
293 (set-buffer existing-buffer)) |
473 | 294 (set-buffer (find-file-noselect generated-autoload-file)) |
295 (save-excursion | |
296 (save-restriction | |
297 (widen) | |
298 (goto-char (point-min)) | |
5815
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
299 ;; Look for the section for LOAD-NAME. |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
300 (while (and (not found) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
301 (search-forward generate-autoload-section-header nil t)) |
473 | 302 (let ((form (condition-case () |
303 (read (current-buffer)) | |
304 (end-of-file nil)))) | |
5815
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
305 (cond ((string= (nth 2 form) load-name) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
306 ;; We found the section for this file. |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
307 ;; Check if it is up to date. |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
308 (let ((begin (match-beginning 0)) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
309 (last-time (nth 4 form)) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
310 (file-time (nth 5 (file-attributes file)))) |
14043
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
311 (message "%s: las %s vs %s" file last-time file-time) |
5815
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
312 (if (and (or (null existing-buffer) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
313 (not (buffer-modified-p existing-buffer))) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
314 (listp last-time) (= (length last-time) 2) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
315 (or (> (car last-time) (car file-time)) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
316 (and (= (car last-time) (car file-time)) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
317 (>= (nth 1 last-time) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
318 (nth 1 file-time))))) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
319 (progn |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
320 (message "Autoload section for %s is up to date." |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
321 file) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
322 (setq found 'up-to-date)) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
323 (search-forward generate-autoload-section-trailer) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
324 (delete-region begin (point)) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
325 (setq found t)))) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
326 ((string< load-name (nth 2 form)) |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
327 ;; We've come to a section alphabetically later than |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
328 ;; LOAD-NAME. We assume the file is in order and so |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
329 ;; there must be no section for LOAD-NAME. We will |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
330 ;; insert one before the section here. |
b1e5e6efed1d
(update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents:
4555
diff
changeset
|
331 (goto-char (match-beginning 0)) |
5837
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
332 (setq found 'new))))) |
14044
1c331f9332ae
(update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents:
14043
diff
changeset
|
333 (or found |
1c331f9332ae
(update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents:
14043
diff
changeset
|
334 (progn |
1c331f9332ae
(update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents:
14043
diff
changeset
|
335 (setq found 'new) |
1c331f9332ae
(update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents:
14043
diff
changeset
|
336 ;; No later sections in the file. Put before the last page. |
1c331f9332ae
(update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents:
14043
diff
changeset
|
337 (goto-char (point-max)) |
1c331f9332ae
(update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents:
14043
diff
changeset
|
338 (search-backward "\f"))) |
5837
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
339 (or (eq found 'up-to-date) |
14044
1c331f9332ae
(update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents:
14043
diff
changeset
|
340 (and (eq found 'new) |
5837
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
341 ;; Check that FILE has any cookies before generating a |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
342 ;; new section for it. |
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
343 (save-excursion |
14043
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
344 (if existing-buffer |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
345 (set-buffer existing-buffer) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
346 ;; It is faster to avoid visiting the file. |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
347 (set-buffer (get-buffer-create " *autoload-file*")) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
348 (kill-all-local-variables) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
349 (erase-buffer) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
350 (setq buffer-undo-list t |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
351 buffer-read-only nil) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
352 (emacs-lisp-mode) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
353 (insert-file-contents file nil)) |
5837
fd1e2c6f7bf5
(autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents:
5815
diff
changeset
|
354 (save-excursion |
14043
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
355 (save-restriction |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
356 (widen) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
357 (goto-char (point-min)) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
358 (prog1 |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
359 (if (search-forward |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
360 (concat "\n" generate-autoload-cookie) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
361 nil t) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
362 nil |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
363 (if (interactive-p) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
364 (message file " has no autoloads")) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
365 t) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
366 (or existing-buffer |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
367 (kill-buffer (current-buffer)))))))) |
7456
493a32789e7d
(update-file-autoloads): Delete leftover variable.
Karl Heuer <kwzh@gnu.org>
parents:
7437
diff
changeset
|
368 (generate-file-autoloads file)))) |
14043
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
369 (if (interactive-p) (save-buffer))))) |
473 | 370 |
371 ;;;###autoload | |
14043
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
372 (defun update-autoloads-from-directory (dir) |
3774
3b0cb275ca29
(generate-autoload-cookie, update-autoloads-here): Doc fixes.
Roland McGrath <roland@gnu.org>
parents:
2535
diff
changeset
|
373 "\ |
14043
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
374 Update loaddefs.el with all the current autoloads from DIR, and no old ones. |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
375 This uses `update-file-autoloads' (which see) do its work." |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
376 (interactive "DUpdate autoloads from directory: ") |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
377 (let ((files (directory-files dir nil "^[^=].*\\.el$"))) |
473 | 378 (save-excursion |
14043
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
379 (set-buffer (find-file-noselect |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
380 (if (file-exists-p generated-autoload-file) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
381 generated-autoload-file |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
382 (expand-file-name generated-autoload-file |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
383 dir)))) |
2535
86d5500624d5
(update-file-autoloads, update-directory-autoloads): If called
Roland McGrath <roland@gnu.org>
parents:
2494
diff
changeset
|
384 (save-excursion |
14043
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
385 (goto-char (point-min)) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
386 (while (search-forward generate-autoload-section-header nil t) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
387 (let* ((form (condition-case () |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
388 (read (current-buffer)) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
389 (end-of-file nil))) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
390 (file (nth 3 form))) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
391 (cond ((not (stringp file))) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
392 ((not (file-exists-p (expand-file-name file dir))) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
393 ;; Remove the obsolete section. |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
394 (let ((begin (match-beginning 0))) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
395 (search-forward generate-autoload-section-trailer) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
396 (delete-region begin (point)))) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
397 (t |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
398 (update-file-autoloads file))) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
399 (setq files (delete file files))))) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
400 ;; Elements remaining in FILES have no existing autoload sections. |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
401 (mapcar 'update-file-autoloads files) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
402 (save-buffer)))) |
473 | 403 |
404 ;;;###autoload | |
405 (defun batch-update-autoloads () | |
14043
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
406 "Update loaddefs.el autoloads in batch mode. |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
407 Calls `update-autoloads-from-directory' on each command line argument." |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
408 (mapcar 'update-autoloads-from-directory command-line-args-left) |
d44a43c284e7
(update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents:
14022
diff
changeset
|
409 (setq command-line-args-left nil)) |
473 | 410 |
411 (provide 'autoload) | |
648 | 412 |
662
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
648
diff
changeset
|
413 ;;; autoload.el ends here |