Mercurial > emacs
changeset 81603:6a5ecb520686
Refactor for upcoming changes.
(autoload-generate-file-autoloads): New function extracted from
generate-file-autoloads. Use file-relative-name. Delay computation of
output-start to the first cookie. Remove done-any, replaced by
output-start.
(generate-file-autoloads): Use it.
(autoload-find-destination): Make use of `begin' var.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Mon, 25 Jun 2007 03:48:10 +0000 |
parents | ea507ef94ad6 |
children | feafa882a0cf |
files | lisp/ChangeLog lisp/emacs-lisp/autoload.el |
diffstat | 2 files changed, 34 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Mon Jun 25 03:01:22 2007 +0000 +++ b/lisp/ChangeLog Mon Jun 25 03:48:10 2007 +0000 @@ -4,6 +4,11 @@ (autoload-find-destination): New function extracted from update-file-autoloads. (update-file-autoloads): Use it. + (autoload-generate-file-autoloads): New function extracted from + generate-file-autoloads. Use file-relative-name. Delay computation of + output-start to the first cookie. Remove done-any, replaced by + output-start. + (generate-file-autoloads): Use it. 2007-06-24 Jay Belanger <jay.p.belanger@gmail.com>
--- a/lisp/emacs-lisp/autoload.el Mon Jun 25 03:01:22 2007 +0000 +++ b/lisp/emacs-lisp/autoload.el Mon Jun 25 03:48:10 2007 +0000 @@ -309,39 +309,32 @@ are used. Return non-nil in the case where no autoloads were added at point." (interactive "fGenerate autoloads for file: ") - (let ((outbuf (current-buffer)) - (autoloads-done '()) + (autoload-generate-file-autoloads file (current-buffer))) + +(defun autoload-generate-file-autoloads (file outbuf) + "Insert an autoload section for FILE in the appropriate buffer. +Autoloads are generated for defuns and defmacros in FILE +marked by `generate-autoload-cookie' (which see). +If FILE is being visited in a buffer, the contents of the buffer are used. +OUTBUF is the buffer in which the autoload statements will be inserted. +Return non-nil in the case where no autoloads were added in the buffer." + (let ((autoloads-done '()) (load-name (autoload-file-load-name file)) (print-length nil) (print-readably t) ; This does something in Lucid Emacs. (float-output-format nil) - (done-any nil) (visited (get-file-buffer file)) + (absfile (expand-file-name file)) + relfile + ;; nil until we found a cookie. output-start) - ;; If the autoload section we create here uses an absolute - ;; file name for FILE in its header, and then Emacs is installed - ;; under a different path on another system, - ;; `update-autoloads-here' won't be able to find the files to be - ;; autoloaded. So, if FILE is in the same directory or a - ;; subdirectory of the current buffer's directory, we'll make it - ;; relative to the current buffer's directory. - (setq file (expand-file-name file)) - (let* ((source-truename (file-truename file)) - (dir-truename (file-name-as-directory - (file-truename default-directory))) - (len (length dir-truename))) - (if (and (< len (length source-truename)) - (string= dir-truename (substring source-truename 0 len))) - (setq file (substring source-truename len)))) - (with-current-buffer (or visited ;; It is faster to avoid visiting the file. (autoload-find-file file)) ;; Obey the no-update-autoloads file local variable. (unless no-update-autoloads (message "Generating autoloads for %s..." file) - (setq output-start (with-current-buffer outbuf (point))) (save-excursion (save-restriction (widen) @@ -350,9 +343,16 @@ (skip-chars-forward " \t\n\f") (cond ((looking-at (regexp-quote generate-autoload-cookie)) + ;; If not done yet, figure out where to insert this text. + (unless output-start + (with-current-buffer outbuf + (setq relfile (file-relative-name absfile)) + (setq output-start (point))) + ;; (message "file=%S, relfile=%S, dest=%S" + ;; file relfile (autoload-generated-file)) + ) (search-forward generate-autoload-cookie) (skip-chars-forward " \t") - (setq done-any t) (if (eolp) (condition-case err ;; Read the next form and make an autoload. @@ -385,23 +385,22 @@ (forward-sexp 1) (forward-line 1)))))) - (when done-any + (when output-start (with-current-buffer outbuf (save-excursion ;; Insert the section-header line which lists the file name ;; and which functions are in it, etc. (goto-char output-start) (autoload-insert-section-header - outbuf autoloads-done load-name file - (nth 5 (file-attributes file))) - (insert ";;; Generated autoloads from " - (autoload-trim-file-name file) "\n")) + outbuf autoloads-done load-name relfile + (nth 5 (file-attributes relfile))) + (insert ";;; Generated autoloads from " relfile "\n")) (insert generate-autoload-section-trailer))) (message "Generating autoloads for %s...done" file)) (or visited ;; We created this buffer, so we should kill it. (kill-buffer (current-buffer)))) - (not done-any))) + (not output-start))) ;;;###autoload (defun update-file-autoloads (file &optional save-after) @@ -467,13 +466,13 @@ ;; Check if it is up to date. (let ((begin (match-beginning 0)) (last-time (nth 4 form)) - (file-time (nth 5 (file-attributes file)))) - (if (and (or (null existing-buffer) + (file-time (nth 5 (file-attributes file)))) + (if (and (or (null existing-buffer) (not (buffer-modified-p existing-buffer))) (listp last-time) (= (length last-time) 2) (not (time-less-p last-time file-time))) (throw 'up-to-date nil) - (autoload-remove-section (match-beginning 0)) + (autoload-remove-section begin) (setq found t)))) ((string< load-name (nth 2 form)) ;; We've come to a section alphabetically later than