annotate lisp/emacs-lisp/autoload.el @ 16884:36babc489b0c

Change all uses of win95, winnt, and win32 into Windows 95, Windows NT, and W32, respectively. Expand "win" substring in variables referring to Microsoft Windows constructs into "windows". Canonicalize header comments to use same terminology.
author Geoff Voelker <voelker@cs.washington.edu>
date Mon, 20 Jan 1997 00:38:22 +0000
parents af6ef293cb42
children 22c9b578e220
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
3 ;; Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
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
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
8 ;; This file is part of GNU Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
9
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
13 ;; any later version.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
14
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
18 ;; GNU General Public License for more details.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
19
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
20 ;; You should have received a copy of the GNU General Public License
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
23 ;; Boston, MA 02111-1307, USA.
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24
7942
bc5dccc5375f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7477
diff changeset
25 ;;; Commentary:
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
26
7437
d9b4098cebb7 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7354
diff changeset
27 ;; 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
28 ;; 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
29 ;; 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
30 ;; 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
31
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
32 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
33
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 (defun make-autoload (form file)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 "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
36 Returns nil if FORM is not a defun, define-skeleton or defmacro."
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 (let ((car (car-safe form)))
12500
6aba36eda051 (make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents: 8864
diff changeset
38 (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
39 (let ((macrop (eq car 'defmacro))
d6f56b9586f7 (make-autoload): Use memq once instead eq twice.
Roland McGrath <roland@gnu.org>
parents: 3774
diff changeset
40 name doc)
12500
6aba36eda051 (make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents: 8864
diff changeset
41 (setq form (cdr form)
6aba36eda051 (make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents: 8864
diff changeset
42 name (car form)
6aba36eda051 (make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents: 8864
diff changeset
43 ;; Ignore the arguments.
6aba36eda051 (make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents: 8864
diff changeset
44 form (cdr (if (eq car 'define-skeleton)
6aba36eda051 (make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents: 8864
diff changeset
45 form
6aba36eda051 (make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents: 8864
diff changeset
46 (cdr form)))
6aba36eda051 (make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents: 8864
diff changeset
47 doc (car form))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 (if (stringp doc)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 (setq form (cdr form))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 (setq doc nil))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 (list 'autoload (list 'quote name) file doc
12500
6aba36eda051 (make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents: 8864
diff changeset
52 (or (eq car 'define-skeleton)
6aba36eda051 (make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents: 8864
diff changeset
53 (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
54 (if macrop (list 'quote 'macro) nil)))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 nil)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56
12500
6aba36eda051 (make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents: 8864
diff changeset
57 (put 'define-skeleton 'doc-string-elt 3)
6aba36eda051 (make-autoload): Generate `(autoload ...)' form for
Karl Heuer <kwzh@gnu.org>
parents: 8864
diff changeset
58
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 (defconst generate-autoload-cookie ";;;###autoload"
3774
3b0cb275ca29 (generate-autoload-cookie, update-autoloads-here): Doc fixes.
Roland McGrath <roland@gnu.org>
parents: 2535
diff changeset
60 "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
61 Used by \\[update-file-autoloads]. This string should be
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 meaningless to Lisp (e.g., a comment).
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 This string is used:
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 ;;;###autoload
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 \(defun function-to-be-autoloaded () ...)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 If this string appears alone on a line, the following form will be
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 read and an autoload made for it. If there is further text on the line,
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 that text will be copied verbatim to `generated-autoload-file'.")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 (defconst generate-autoload-section-header "\f\n;;;### "
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 "String inserted before the form identifying
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 the section of autoloads for a file.")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 (defconst generate-autoload-section-trailer "\n;;;***\n"
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 "String which indicates the end of the section of autoloads for a file.")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
80 ;;; Forms which have doc-strings which should be printed specially.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
81 ;;; A doc-string-elt property of ELT says that (nth ELT FORM) is
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
82 ;;; the doc-string in FORM.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
83 ;;;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
84 ;;; There used to be the following note here:
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
85 ;;; ;;; Note: defconst and defvar should NOT be marked in this way.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
86 ;;; ;;; We don't want to produce defconsts and defvars that
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
87 ;;; ;;; make-docfile can grok, because then it would grok them twice,
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
88 ;;; ;;; once in foo.el (where they are given with ;;;###autoload) and
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
89 ;;; ;;; once in loaddefs.el.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
90 ;;;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
91 ;;; Counter-note: Yes, they should be marked in this way.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
92 ;;; make-docfile only processes those files that are loaded into the
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
93 ;;; dumped Emacs, and those files should never have anything
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
94 ;;; autoloaded here. The above-feared problem only occurs with files
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
95 ;;; which have autoloaded entries *and* are processed by make-docfile;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
96 ;;; there should be no such files.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
97
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 (put 'autoload 'doc-string-elt 3)
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
99 (put 'defun 'doc-string-elt 3)
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
100 (put 'defvar 'doc-string-elt 3)
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
101 (put 'defconst 'doc-string-elt 3)
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
102 (put 'defmacro 'doc-string-elt 3)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
104 (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
105 ;; Returns a relative pathname of FILE
a01cc9d6398d (autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents: 7472
diff changeset
106 ;; 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
107 ;; 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
108 ;; 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
109 ;; 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
110 (setq file (expand-file-name file))
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
111 (file-relative-name file
7477
a01cc9d6398d (autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents: 7472
diff changeset
112 (file-name-directory generated-autoload-file)))
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
113
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 (defun generate-file-autoloads (file)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 "Insert at point a loaddefs autoload section for FILE.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 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
117 marked by `generate-autoload-cookie' (which see).
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 If FILE is being visited in a buffer, the contents of the buffer
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 are used."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 (interactive "fGenerate autoloads for file: ")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 (let ((outbuf (current-buffer))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 (autoloads-done '())
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 (load-name (let ((name (file-name-nondirectory file)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 (if (string-match "\\.elc?$" name)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 (substring name 0 (match-beginning 0))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 name)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 (print-length nil)
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
128 (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
129 (float-output-format nil)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 (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
131 (visited (get-file-buffer file))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 output-end)
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
133
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
134 ;; If the autoload section we create here uses an absolute
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
135 ;; pathname for FILE in its header, and then Emacs is installed
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
136 ;; under a different path on another system,
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
137 ;; `update-autoloads-here' won't be able to find the files to be
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
138 ;; autoloaded. So, if FILE is in the same directory or a
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
139 ;; subdirectory of the current buffer's directory, we'll make it
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
140 ;; relative to the current buffer's directory.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
141 (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
142 (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
143 (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
144 (file-truename default-directory)))
410395998370 (generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents: 4068
diff changeset
145 (len (length dir-truename)))
410395998370 (generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents: 4068
diff changeset
146 (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
147 (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
148 (setq file (substring source-truename len))))
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
149
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 (message "Generating autoloads for %s..." file)
1975
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
151 (save-excursion
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
152 (unwind-protect
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
153 (progn
13730
87eb8f956a00 (generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents: 12500
diff changeset
154 (if visited
87eb8f956a00 (generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents: 12500
diff changeset
155 (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
156 ;; 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
157 (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
158 (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
159 (erase-buffer)
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
160 (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
161 buffer-read-only nil)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
162 (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
163 (insert-file-contents file nil))
1975
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
164 (save-excursion
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
165 (save-restriction
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
166 (widen)
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
167 (goto-char (point-min))
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
168 (while (not (eobp))
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
169 (skip-chars-forward " \t\n\f")
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
170 (cond
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
171 ((looking-at (regexp-quote generate-autoload-cookie))
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
172 (search-forward generate-autoload-cookie)
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
173 (skip-chars-forward " \t")
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
174 (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
175 (if (eolp)
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
176 ;; 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
177 (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
178 (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
179 (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
180 (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
181 '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
182 (if autoload
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
183 (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
184 autoloads-done))
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
185 (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
186 (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
187 (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
188 ;; 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
189 ;; 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
190 ;; 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
191 (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
192 autoload))
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
193 (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
194 (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
195 (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
196 (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
197 (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
198 (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
199 (princ " " outbuf)))
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
200 autoload))
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
201 (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
202 (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
203 (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
204 (point))))
1975
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
205 (princ (substring
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
206 (prin1-to-string (car elt)) 1)
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
207 outbuf)
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
208 ;; Insert a backslash before each ( that
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
209 ;; appears at the beginning of a line in
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
210 ;; the doc string.
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
211 (save-excursion
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
212 (set-buffer outbuf)
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
213 (save-excursion
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
214 (while (search-backward "\n(" begin t)
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
215 (forward-char 1)
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
216 (insert "\\"))))
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
217 (if (null (cdr elt))
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 " " outbuf)
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
220 (princ (substring
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
221 (prin1-to-string (cdr elt))
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
222 1)
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
223 outbuf))
5854
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
224 (terpri outbuf)))
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
225 (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
226 (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
227 ;; 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
228 (princ (buffer-substring
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
229 (progn
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
230 ;; 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
231 (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
232 (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
233 ;; Eat one space.
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
234 (forward-char 1))
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
235 (point))
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
236 (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
237 outbuf)))
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
238 ((looking-at ";")
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
239 ;; Don't read the comment.
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
240 (forward-line 1))
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
241 (t
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
242 (forward-sexp 1)
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
243 (forward-line 1)))))))
1975
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
244 (or visited
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
245 ;; 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
246 (kill-buffer (current-buffer)))
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
247 (set-buffer outbuf)
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
248 (setq output-end (point-marker))))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 (if done-any
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 (progn
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 (insert generate-autoload-section-header)
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
252 (prin1 (list 'autoloads autoloads-done load-name
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
253 (autoload-trim-file-name file)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 (nth 5 (file-attributes file)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 outbuf)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 (terpri outbuf)
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
257 (insert ";;; Generated autoloads from "
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
258 (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
259 ;; 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
260 ;; 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
261 (while (< (point) output-end)
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
262 (let ((beg (point)))
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
263 (end-of-line)
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
264 (if (> (- (point) beg) 900)
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
265 (progn
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
266 (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
267 (sleep-for 2)
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
268 (goto-char output-end))))
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
269 (forward-line 1))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 (goto-char output-end)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 (insert generate-autoload-section-trailer)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 (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
273
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 (defconst generated-autoload-file "loaddefs.el"
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 "*File \\[update-file-autoloads] puts autoloads into.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 A .el file can set this in its local variables section to make its
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 autoloads go somewhere else.")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 ;;;###autoload
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 (defun update-file-autoloads (file)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 "Update the autoloads for FILE in `generated-autoload-file'
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 \(which FILE might bind in its local variables)."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 (interactive "fUpdate autoloads for file: ")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 (let ((load-name (let ((name (file-name-nondirectory file)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 (if (string-match "\\.elc?$" name)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 (substring name 0 (match-beginning 0))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 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
288 (found nil)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 (existing-buffer (get-file-buffer file)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 (save-excursion
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 ;; We want to get a value for generated-autoload-file from
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 ;; 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
293 (if existing-buffer
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
294 (set-buffer existing-buffer))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 (set-buffer (find-file-noselect generated-autoload-file))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 (save-excursion
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 (save-restriction
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 (widen)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 (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
300 ;; 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
301 (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
302 (search-forward generate-autoload-section-header nil t))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 (let ((form (condition-case ()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 (read (current-buffer))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 (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
306 (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
307 ;; 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
308 ;; 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
309 (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
310 (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
311 (file-time (nth 5 (file-attributes file))))
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
14252
7ef2eabb1a9c (update-file-autoloads): Only give "up to date" msg if (interactive-p).
Roland McGrath <roland@gnu.org>
parents: 14192
diff changeset
320 (if (interactive-p)
7ef2eabb1a9c (update-file-autoloads): Only give "up to date" msg if (interactive-p).
Roland McGrath <roland@gnu.org>
parents: 14192
diff changeset
321 (message "\
7ef2eabb1a9c (update-file-autoloads): Only give "up to date" msg if (interactive-p).
Roland McGrath <roland@gnu.org>
parents: 14192
diff changeset
322 Autoload section for %s is up to date."
7ef2eabb1a9c (update-file-autoloads): Only give "up to date" msg if (interactive-p).
Roland McGrath <roland@gnu.org>
parents: 14192
diff changeset
323 file))
5815
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
324 (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
325 (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
326 (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
327 (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
328 ((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
329 ;; 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
330 ;; 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
331 ;; 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
332 ;; 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
333 (goto-char (match-beginning 0))
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
334 (setq found 'new)))))
14044
1c331f9332ae (update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents: 14043
diff changeset
335 (or found
1c331f9332ae (update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents: 14043
diff changeset
336 (progn
1c331f9332ae (update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents: 14043
diff changeset
337 (setq found 'new)
1c331f9332ae (update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents: 14043
diff changeset
338 ;; 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
339 (goto-char (point-max))
16158
af6ef293cb42 (update-file-autoloads): Don't barf if autoloads file
Richard M. Stallman <rms@gnu.org>
parents: 14252
diff changeset
340 (search-backward "\f" nil t)))
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
341 (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
342 (and (eq found 'new)
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
343 ;; 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
344 ;; new section for it.
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
345 (save-excursion
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
346 (if existing-buffer
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
347 (set-buffer existing-buffer)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
348 ;; 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
349 (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
350 (kill-all-local-variables)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
351 (erase-buffer)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
352 (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
353 buffer-read-only nil)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
354 (emacs-lisp-mode)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
355 (insert-file-contents file nil))
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
356 (save-excursion
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
357 (save-restriction
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
358 (widen)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
359 (goto-char (point-min))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
360 (prog1
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
361 (if (search-forward
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
362 (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
363 nil t)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
364 nil
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
365 (if (interactive-p)
14192
b1bc0f5d8cf3 (update-file-autoloads): Fix message.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
366 (message "%s has no autoloads" file))
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
367 t)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
368 (or existing-buffer
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
369 (kill-buffer (current-buffer))))))))
7456
493a32789e7d (update-file-autoloads): Delete leftover variable.
Karl Heuer <kwzh@gnu.org>
parents: 7437
diff changeset
370 (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
371 (if (interactive-p) (save-buffer)))))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 ;;;###autoload
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
374 (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
375 "\
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
376 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
377 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
378 (interactive "DUpdate autoloads from directory: ")
14252
7ef2eabb1a9c (update-file-autoloads): Only give "up to date" msg if (interactive-p).
Roland McGrath <roland@gnu.org>
parents: 14192
diff changeset
379 (setq dir (expand-file-name dir))
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
380 (let ((files (directory-files dir nil "^[^=].*\\.el$")))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 (save-excursion
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
382 (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
383 (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
384 generated-autoload-file
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
385 (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
386 dir))))
2535
86d5500624d5 (update-file-autoloads, update-directory-autoloads): If called
Roland McGrath <roland@gnu.org>
parents: 2494
diff changeset
387 (save-excursion
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
388 (goto-char (point-min))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
389 (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
390 (let* ((form (condition-case ()
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
391 (read (current-buffer))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
392 (end-of-file nil)))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
393 (file (nth 3 form)))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
394 (cond ((not (stringp file)))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
395 ((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
396 ;; Remove the obsolete section.
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
397 (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
398 (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
399 (delete-region begin (point))))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
400 (t
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
401 (update-file-autoloads file)))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
402 (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
403 ;; 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
404 (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
405 (save-buffer))))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 ;;;###autoload
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 (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
409 "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
410 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
411 (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
412 (setq command-line-args-left nil))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 (provide 'autoload)
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 473
diff changeset
415
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 648
diff changeset
416 ;;; autoload.el ends here