2007-06-25 Stefan Monnier <monnier@iro.umontreal.ca>
+ * emacs-lisp/autoload.el (autoload-modified-buffers): New var.
+ (autoload-find-destination): Keep it uptodate.
+ (autoload-save-buffers): New fun.
+ (update-file-autoloads): Use it. Re-add the "up to date" message.
+
* emacs-lisp/autoload.el: Refactor for upcoming changes.
(autoload-find-destination): New function extracted from
update-file-autoloads.
(kill-buffer (current-buffer))))
(not output-start)))
\f
+(defvar autoload-modified-buffers nil)
+
+(defun autoload-save-buffers ()
+ (while autoload-modified-buffers
+ (with-current-buffer (pop autoload-modified-buffers)
+ (save-buffer))))
+
;;;###autoload
(defun update-file-autoloads (file &optional save-after)
"Update the autoloads for FILE in `generated-autoload-file'
Return FILE if there was no autoload cookie in it, else nil."
(interactive "fUpdate autoloads for file: \np")
- (let ((existing-buffer (get-file-buffer file)))
+ (let ((existing-buffer (get-file-buffer file))
+ (no-autoloads nil))
(with-temp-buffer
;; Let's presume the file is not visited, so we call
;; autoload-find-destination from a dummy buffer, except if the file
;; is visited, in which case we use that buffer instead.
(if existing-buffer (set-buffer existing-buffer))
- (catch 'up-to-date
- (let ((buf (autoload-find-destination file)))
- (with-current-buffer buf
- (let ((no-autoloads (generate-file-autoloads file)))
-
- (and save-after
- (buffer-modified-p)
- (save-buffer))
-
- (if no-autoloads file))))))))
+ (if (catch 'up-to-date
+ (with-current-buffer (autoload-find-destination file)
+ (setq no-autoloads (generate-file-autoloads file))
+ t))
+ (if save-after (autoload-save-buffers))
+ (if (interactive-p)
+ (message "Autoload section for %s is up to date." file))))
+ ;; If we caught `up-to-date', it means there are autoload entries, since
+ ;; otherwise we wouldn't have detected their up-to-dateness.
+ (if no-autoloads file)))
(defun autoload-find-destination (file)
"Find the destination point of the current buffer's autoloads.
;; No later sections in the file. Put before the last page.
(goto-char (point-max))
(search-backward "\f" nil t)))
+ (unless (memq (current-buffer) autoload-modified-buffers)
+ (push (current-buffer) autoload-modified-buffers))
(current-buffer))))
(defun autoload-remove-section (begin)