Mercurial > emacs
changeset 1884:4a8bc12e7017
(generate-file-autoloads): If no buffer was visiting FILE when we started,
kill the buffer we create.
author | Roland McGrath <roland@gnu.org> |
---|---|
date | Wed, 17 Feb 1993 21:30:21 +0000 |
parents | b707809f29bb |
children | 9e79ffe97d5b |
files | lisp/emacs-lisp/autoload.el |
diffstat | 1 files changed, 66 insertions(+), 59 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/emacs-lisp/autoload.el Wed Feb 17 20:34:20 1993 +0000 +++ b/lisp/emacs-lisp/autoload.el Wed Feb 17 21:30:21 1993 +0000 @@ -1,6 +1,6 @@ ;;; autoload.el --- maintain autoloads in loaddefs.el. -;;; Copyright (C) 1991, 1992 Free Software Foundation, Inc. +;;; Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. ;;; ;; Author: Roland McGrath <roland@gnu.ai.mit.edu> ;; Keyword: internal @@ -96,7 +96,6 @@ are used." (interactive "fGenerate autoloads for file: ") (let ((outbuf (current-buffer)) - (inbuf (find-file-noselect file)) (autoloads-done '()) (load-name (let ((name (file-name-nondirectory file))) (if (string-match "\\.elc?$" name) @@ -105,6 +104,7 @@ (print-length nil) (floating-output-format "%20e") (done-any nil) + (visited (get-file-buffer file)) output-end) ;; If the autoload section we create here uses an absolute @@ -122,63 +122,70 @@ (setq file (substring file (length default-directory))))) (message "Generating autoloads for %s..." file) - (save-excursion - (set-buffer inbuf) - (save-excursion - (save-restriction - (widen) - (goto-char (point-min)) - (while (not (eobp)) - (skip-chars-forward " \t\n\f") - (cond ((looking-at (regexp-quote generate-autoload-cookie)) - (search-forward generate-autoload-cookie) - (skip-chars-forward " \t") - (setq done-any t) - (if (eolp) - ;; Read the next form and make an autoload. - (let* ((form (prog1 (read (current-buffer)) - (forward-line 1))) - (autoload (make-autoload form load-name)) - (doc-string-elt (get (car-safe form) - 'doc-string-elt))) - (if autoload - (setq autoloads-done (cons (nth 1 form) - autoloads-done)) - (setq autoload form)) - (if (and doc-string-elt - (stringp (nth doc-string-elt autoload))) - ;; We need to hack the printing because the - ;; doc-string must be printed specially for - ;; make-docfile (sigh). - (let* ((p (nthcdr (1- doc-string-elt) autoload)) - (elt (cdr p))) - (setcdr p nil) - (princ "\n(" outbuf) - (mapcar (function (lambda (elt) - (prin1 elt outbuf) - (princ " " outbuf))) - autoload) - (princ "\"\\\n" outbuf) - (princ (substring (prin1-to-string (car elt)) 1) - outbuf) - (if (null (cdr elt)) - (princ ")" outbuf) - (princ " " outbuf) - (princ (substring (prin1-to-string (cdr elt)) - 1) - outbuf)) - (terpri outbuf)) - (print autoload outbuf))) - ;; Copy the rest of the line to the output. - (let ((begin (point))) - (forward-line 1) - (princ (buffer-substring begin (point)) outbuf)))) - ((looking-at ";") - ;; Don't read the comment. - (forward-line 1)) - (t - (forward-sexp 1) - (forward-line 1)))))) + (unwind-protect + (progn + (set-buffer (find-file-noselect file)) + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (while (not (eobp)) + (skip-chars-forward " \t\n\f") + (cond ((looking-at (regexp-quote generate-autoload-cookie)) + (search-forward generate-autoload-cookie) + (skip-chars-forward " \t") + (setq done-any t) + (if (eolp) + ;; Read the next form and make an autoload. + (let* ((form (prog1 (read (current-buffer)) + (forward-line 1))) + (autoload (make-autoload form load-name)) + (doc-string-elt (get (car-safe form) + 'doc-string-elt))) + (if autoload + (setq autoloads-done (cons (nth 1 form) + autoloads-done)) + (setq autoload form)) + (if (and doc-string-elt + (stringp (nth doc-string-elt autoload))) + ;; We need to hack the printing because the + ;; doc-string must be printed specially for + ;; make-docfile (sigh). + (let* ((p (nthcdr (1- doc-string-elt) + autoload)) + (elt (cdr p))) + (setcdr p nil) + (princ "\n(" outbuf) + (mapcar (function (lambda (elt) + (prin1 elt outbuf) + (princ " " outbuf))) + autoload) + (princ "\"\\\n" outbuf) + (princ (substring + (prin1-to-string (car elt)) 1) + outbuf) + (if (null (cdr elt)) + (princ ")" outbuf) + (princ " " outbuf) + (princ (substring + (prin1-to-string (cdr elt)) + 1) + outbuf)) + (terpri outbuf)) + (print autoload outbuf))) + ;; Copy the rest of the line to the output. + (let ((begin (point))) + (forward-line 1) + (princ (buffer-substring begin (point)) outbuf)))) + ((looking-at ";") + ;; Don't read the comment. + (forward-line 1)) + (t + (forward-sexp 1) + (forward-line 1))))))) + (or visited + ;; We created this buffer, so we should kill it. + (kill-buffer (current-buffer))) (set-buffer outbuf) (setq output-end (point-marker))) (if done-any