Make autoloading commands prompt for autoload file (Bug#7989)
* emacs-lisp/autoload.el (generated-autoload-file): Set to nil. (autoload-find-generated-file): New function. (generate-file-autoloads): Bind generated-autoload-file to buffer-file-name. (update-file-autoloads, update-directory-autoloads): Use autoload-find-generated-file. If called interactively, prompt for output file. (batch-update-autoloads): Doc fix.
This commit is contained in:
parent
0898ca10c0
commit
9ed7c8cbce
2 changed files with 59 additions and 29 deletions
|
@ -34,8 +34,8 @@
|
|||
(require 'help-fns) ;for help-add-fundoc-usage.
|
||||
(eval-when-compile (require 'cl))
|
||||
|
||||
(defvar generated-autoload-file "loaddefs.el"
|
||||
"File \\[update-file-autoloads] puts autoloads into.
|
||||
(defvar generated-autoload-file nil
|
||||
"File into which to write autoload definitions.
|
||||
A Lisp file can set this in its local variables section to make
|
||||
its autoloads go somewhere else.
|
||||
|
||||
|
@ -198,6 +198,15 @@ or macro definition or a defcustom)."
|
|||
;; the doc-string in FORM.
|
||||
;; Those properties are now set in lisp-mode.el.
|
||||
|
||||
(defun autoload-find-generated-file ()
|
||||
"Visit the autoload file for the current buffer, and return its buffer.
|
||||
If a buffer is visiting the desired autoload file, return it."
|
||||
(let ((enable-local-variables :safe))
|
||||
;; We used to use `raw-text' to read this file, but this causes
|
||||
;; problems when the file contains non-ASCII characters.
|
||||
(find-file-noselect
|
||||
(autoload-ensure-default-file (autoload-generated-file)))))
|
||||
|
||||
(defun autoload-generated-file ()
|
||||
(expand-file-name generated-autoload-file
|
||||
;; File-local settings of generated-autoload-file should
|
||||
|
@ -389,7 +398,8 @@ If FILE is being visited in a buffer, the contents of the buffer
|
|||
are used.
|
||||
Return non-nil in the case where no autoloads were added at point."
|
||||
(interactive "fGenerate autoloads for file: ")
|
||||
(autoload-generate-file-autoloads file (current-buffer)))
|
||||
(let ((generated-autoload-file buffer-file-name))
|
||||
(autoload-generate-file-autoloads file (current-buffer))))
|
||||
|
||||
(defvar print-readably)
|
||||
|
||||
|
@ -550,15 +560,22 @@ Return non-nil if and only if FILE adds no autoloads to OUTFILE
|
|||
(save-buffer)))))
|
||||
|
||||
;;;###autoload
|
||||
(defun update-file-autoloads (file &optional save-after)
|
||||
"Update the autoloads for FILE in `generated-autoload-file'
|
||||
\(which FILE might bind in its local variables).
|
||||
If SAVE-AFTER is non-nil (which is always, when called interactively),
|
||||
save the buffer too.
|
||||
(defun update-file-autoloads (file &optional save-after outfile)
|
||||
"Update the autoloads for FILE.
|
||||
If prefix arg SAVE-AFTER is non-nil, save the buffer too.
|
||||
|
||||
If FILE binds `generated-autoload-file' as a file-local variable,
|
||||
autoloads are written into that file. Otherwise, the autoloads
|
||||
file is determined by OUTFILE. If called interactively, prompt
|
||||
for OUTFILE; if called from Lisp with OUTFILE nil, use the
|
||||
existing value of `generated-autoload-file'.
|
||||
|
||||
Return FILE if there was no autoload cookie in it, else nil."
|
||||
(interactive "fUpdate autoloads for file: \np")
|
||||
(let* ((autoload-modified-buffers nil)
|
||||
(interactive (list (read-file-name "Update autoloads for file: ")
|
||||
current-prefix-arg
|
||||
(read-file-name "Write autoload definitions to file: ")))
|
||||
(let* ((generated-autoload-file (or outfile generated-autoload-file))
|
||||
(autoload-modified-buffers nil)
|
||||
(no-autoloads (autoload-generate-file-autoloads file)))
|
||||
(if autoload-modified-buffers
|
||||
(if save-after (autoload-save-buffers))
|
||||
|
@ -576,12 +593,7 @@ removes any prior now out-of-date autoload entries."
|
|||
(let* ((buf (current-buffer))
|
||||
(existing-buffer (if buffer-file-name buf))
|
||||
(found nil))
|
||||
(with-current-buffer
|
||||
;; We used to use `raw-text' to read this file, but this causes
|
||||
;; problems when the file contains non-ASCII characters.
|
||||
(let ((enable-local-variables :safe))
|
||||
(find-file-noselect
|
||||
(autoload-ensure-default-file (autoload-generated-file))))
|
||||
(with-current-buffer (autoload-find-generated-file)
|
||||
;; This is to make generated-autoload-file have Unix EOLs, so
|
||||
;; that it is portable to all platforms.
|
||||
(or (eq 0 (coding-system-eol-type buffer-file-coding-system))
|
||||
|
@ -640,15 +652,20 @@ removes any prior now out-of-date autoload entries."
|
|||
|
||||
;;;###autoload
|
||||
(defun update-directory-autoloads (&rest dirs)
|
||||
"\
|
||||
Update loaddefs.el with all the current autoloads from DIRS, and no old ones.
|
||||
This uses `update-file-autoloads' (which see) to do its work.
|
||||
In an interactive call, you must give one argument, the name
|
||||
of a single directory. In a call from Lisp, you can supply multiple
|
||||
"Update autoload definitions for Lisp files in the directories DIRS.
|
||||
In an interactive call, you must give one argument, the name of a
|
||||
single directory. In a call from Lisp, you can supply multiple
|
||||
directories as separate arguments, but this usage is discouraged.
|
||||
|
||||
The function does NOT recursively descend into subdirectories of the
|
||||
directory or directories specified."
|
||||
directory or directories specified.
|
||||
|
||||
In an interactive call, prompt for a default output file for the
|
||||
autoload definitions, and temporarily bind the variable
|
||||
`generated-autoload-file' to this value. When called from Lisp,
|
||||
use the existing value of `generated-autoload-file'. If any Lisp
|
||||
file binds `generated-autoload-file' as a file-local variable,
|
||||
write its autoloads into the specified file instead."
|
||||
(interactive "DUpdate autoloads from directory: ")
|
||||
(let* ((files-re (let ((tmp nil))
|
||||
(dolist (suf (get-load-suffixes)
|
||||
|
@ -664,14 +681,14 @@ directory or directories specified."
|
|||
;; Files with no autoload cookies or whose autoloads go to other
|
||||
;; files because of file-local autoload-generated-file settings.
|
||||
(no-autoloads nil)
|
||||
(autoload-modified-buffers nil))
|
||||
(autoload-modified-buffers nil)
|
||||
(generated-autoload-file
|
||||
(if (called-interactively-p 'interactive)
|
||||
(read-file-name "Write autoload definitions to file: ")
|
||||
generated-autoload-file)))
|
||||
|
||||
(with-current-buffer
|
||||
(let ((enable-local-variables :safe))
|
||||
(find-file-noselect
|
||||
(autoload-ensure-default-file (autoload-generated-file))))
|
||||
(with-current-buffer (autoload-find-generated-file)
|
||||
(save-excursion
|
||||
|
||||
;; Canonicalize file names and remove the autoload file itself.
|
||||
(setq files (delete (file-relative-name buffer-file-name)
|
||||
(mapcar 'file-relative-name files)))
|
||||
|
@ -748,7 +765,9 @@ directory or directories specified."
|
|||
;;;###autoload
|
||||
(defun batch-update-autoloads ()
|
||||
"Update loaddefs.el autoloads in batch mode.
|
||||
Calls `update-directory-autoloads' on the command line arguments."
|
||||
Calls `update-directory-autoloads' on the command line arguments.
|
||||
Definitions are written to `generated-autoload-file' (which
|
||||
should be non-nil)."
|
||||
;; For use during the Emacs build process only.
|
||||
(unless autoload-excludes
|
||||
(let* ((ldir (file-name-directory generated-autoload-file))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue