emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r104107: Make autoloading commands pr


From: Chong Yidong
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r104107: Make autoloading commands prompt for autoload file (Bug#7989)
Date: Wed, 04 May 2011 11:38:41 -0400
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 104107
committer: Chong Yidong <address@hidden>
branch nick: trunk
timestamp: Wed 2011-05-04 11:38:41 -0400
message:
  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.
modified:
  lisp/ChangeLog
  lisp/emacs-lisp/autoload.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2011-05-04 14:03:16 +0000
+++ b/lisp/ChangeLog    2011-05-04 15:38:41 +0000
@@ -1,3 +1,14 @@
+2011-05-04  Chong Yidong  <address@hidden>
+
+       * 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 (Bug#7989).
+       (batch-update-autoloads): Doc fix.
+
 2011-05-04  Juanma Barranquero  <address@hidden>
 
        * term/w32-win.el (dynamic-library-alist): Add `gnutls'.

=== modified file 'lisp/emacs-lisp/autoload.el'
--- a/lisp/emacs-lisp/autoload.el       2011-05-03 15:33:05 +0000
+++ b/lisp/emacs-lisp/autoload.el       2011-05-04 15:38:41 +0000
@@ -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 @@
 ;; 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 @@
 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 @@
        (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 @@
     (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 @@
 
 ;;;###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 @@
          ;; 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 @@
 ;;;###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))


reply via email to

[Prev in Thread] Current Thread [Next in Thread]