X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fautoload.el;h=8ca8bbc5ffc11719707ecc466a21a4b20ef57cf8;hb=5550b5b91e953696b468934fd97770824224c3ee;hp=ec708732dd9c7b7aa4a8f76f4b3d7fb9bf6d281f;hpb=72a705551741d6f85a40eea486c222bac482d8dc;p=chise%2Fxemacs-chise.git.1 diff --git a/lisp/autoload.el b/lisp/autoload.el index ec70873..8ca8bbc 100644 --- a/lisp/autoload.el +++ b/lisp/autoload.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. ;; Copyright (C) 1995 Tinker Systems and INS Engineering Corp. -;; Copyright (C) 1996 Ben Wing. +;; Copyright (C) 1996, 2000 Ben Wing. ;; Author: Roland McGrath ;; Keywords: maint @@ -40,30 +40,33 @@ ;;; Code: (defun make-autoload (form file) - "Turn FORM, a defun or defmacro, into an autoload for source file FILE. -Returns nil if FORM is not a defun, define-skeleton or defmacro." + "Turn a definition generator FORM into an autoload for source file FILE. +Returns nil if FORM is not a defun, define-skeleton, define-derived-mode, +or defmacro." (let ((car (car-safe form))) - (if (memq car '(defun define-skeleton defmacro)) + (if (memq car '(defun define-skeleton defmacro define-derived-mode)) (let ((macrop (eq car 'defmacro)) name doc) (setq form (cdr form) name (car form) ;; Ignore the arguments. - form (cdr (if (eq car 'define-skeleton) - form - (cdr form))) + form (cdr (cond ((eq car 'define-skeleton) + form) + ((eq car 'define-derived-mode) + (cddr form)) + (t + (cdr form)))) doc (car form)) (if (stringp doc) (setq form (cdr form)) (setq doc nil)) (list 'autoload (list 'quote name) file doc (or (eq car 'define-skeleton) + (eq car 'define-derived-mode) (eq (car-safe (car form)) 'interactive)) (if macrop (list 'quote 'macro) nil))) nil))) -(put 'define-skeleton 'doc-string-elt 3) - (defvar generate-autoload-cookie ";;;###autoload" "Magic comment indicating the following form should be autoloaded. Used by `update-file-autoloads'. This string should be @@ -87,6 +90,8 @@ the section of autoloads for a file.") (defvar generate-autoload-section-trailer "\n;;;***\n" "String which indicates the end of the section of autoloads for a file.") +(defvar autoload-package-name nil) + ;;; Forms which have doc-strings which should be printed specially. ;;; A doc-string-elt property of ELT says that (nth ELT FORM) is ;;; the doc-string in FORM. @@ -110,13 +115,17 @@ the section of autoloads for a file.") (put 'defvar 'doc-string-elt 3) (put 'defconst 'doc-string-elt 3) (put 'defmacro 'doc-string-elt 3) +(put 'define-skeleton 'doc-string-elt 3) +(put 'define-derived-mode 'doc-string-elt 4) (defun autoload-trim-file-name (file) "Returns a relative pathname of FILE including the last directory." (setq file (expand-file-name file)) - (file-relative-name file (file-name-directory - (directory-file-name - (file-name-directory file))))) + (replace-in-string + (file-relative-name file (file-name-directory + (directory-file-name + (file-name-directory file)))) + "\\\\" "/")) ;;;###autoload (defun generate-file-autoloads (file &optional funlist) @@ -163,7 +172,7 @@ are used." (let ((find-file-hooks nil) (enable-local-variables nil)) (set-buffer (or visited (find-file-noselect file))) - (set-syntax-table lisp-mode-syntax-table)) + (set-syntax-table emacs-lisp-mode-syntax-table)) (save-excursion (save-restriction (widen) @@ -339,7 +348,7 @@ are used." "Generic filename to put autoloads into. Unless you are an XEmacs maintainer, it is probably unwise to change this.") -(defvar autoload-target-directory "../lisp/prim/" +(defvar autoload-target-directory "../lisp/" "Directory to put autoload declaration file into. Unless you know what you're doing, don't mess with this.") @@ -349,17 +358,21 @@ Unless you know what you're doing, don't mess with this.") data-directory) "*File `update-file-autoloads' puts autoloads into. A .el file can set this in its local variables section to make its -autoloads go somewhere else.") +autoloads go somewhere else. + +Note that `batch-update-directory' binds this variable to its own value, +generally the file named `autoload-file-name' in the directory being +updated.") (defconst cusload-file-name "custom-load.el" - "Generic filename ot put custom loads into. -Unless you are an XEmacs maintainr, it is probably unwise to change this.") + "Generic filename to put custom loads into. +Unless you are an XEmacs maintainer, it is probably unwise to change this.") ;;;###autoload (defun update-file-autoloads (file) "Update the autoloads for FILE in `generated-autoload-file' \(which FILE might bind in its local variables). -This functions refuses to update autoloads files." +This function refuses to update autoloads files." (interactive "fUpdate autoloads for file: ") (setq file (expand-file-name file)) (when (and (file-newer-than-file-p file generated-autoload-file) @@ -458,7 +471,9 @@ This functions refuses to update autoloads files." (defun update-autoloads-from-directory (dir) "Update `generated-autoload-file' with all the current autoloads from DIR. This runs `update-file-autoloads' on each .el file in DIR. -Obsolete autoload entries for files that no longer exist are deleted." +Obsolete autoload entries for files that no longer exist are deleted. +Note that, if this function is called from `batch-update-directory', +`generated-autoload-file' was rebound in that function." (interactive "DUpdate autoloads for directory: ") (setq dir (expand-file-name dir)) (let ((simple-dir (file-name-as-directory @@ -499,7 +514,7 @@ The directory to which the auto-autoloads.el file must be the first parameter on the command line." (unless noninteractive (error "batch-update-autoloads is to be used only with -batch")) - (let ((defdir default-directory) + (let ((defdir (directory-file-name default-directory)) (enable-local-eval nil)) ; Don't query in batch mode. ;; (message "Updating autoloads in %s..." generated-autoload-file) (dolist (arg command-line-args-left) @@ -534,18 +549,25 @@ on the command line." (defvar autoload-package-name nil) +;; #### this function is almost identical to, but subtly different from, +;; batch-update-autoloads. Both of these functions, unfortunately, are +;; used in various build scripts in xemacs-packages. They should be +;; merged. (However, it looks like no scripts pass more than one arg, +;; making merging easy.) --ben + ;;;###autoload (defun batch-update-directory () - "Update the autoloads for the directory on the command line. -Runs `update-file-autoloads' on each file in the given directory, must -be used only with -batch and kills XEmacs on completion." + "Update the autoloads for the directories on the command line. +Runs `update-file-autoloads' on each file in the given directory, and must +be used only with -batch." (unless noninteractive (error "batch-update-directory is to be used only with -batch")) (let ((defdir default-directory) (enable-local-eval nil)) ; Don't query in batch mode. (dolist (arg command-line-args-left) (setq arg (expand-file-name arg defdir)) - (let ((generated-autoload-file (concat arg "/" autoload-file-name))) + (let ((generated-autoload-file (expand-file-name autoload-file-name + arg))) (cond ((file-directory-p arg) (message "Updating autoloads in directory %s..." arg) @@ -561,6 +583,36 @@ be used only with -batch and kills XEmacs on completion." ) (setq command-line-args-left nil))) +;; #### i created the following. this one and the last should be merged into +;; batch-update-autoloads and batch-update-one-directory. --ben + +;;;###autoload +(defun batch-update-one-directory () + "Update the autoloads for a single directory on the command line. +Runs `update-file-autoloads' on each file in the given directory, and must +be used only with -batch." + (unless noninteractive + (error "batch-update-directory is to be used only with -batch")) + (let ((defdir default-directory) + (enable-local-eval nil)) ; Don't query in batch mode. + (let ((arg (car command-line-args-left))) + (setq command-line-args-left (cdr command-line-args-left)) + (setq arg (expand-file-name arg defdir)) + (let ((generated-autoload-file (expand-file-name autoload-file-name + arg))) + (cond + ((file-directory-p arg) + (message "Updating autoloads in directory %s..." arg) + (update-autoloads-from-directory arg)) + (t (error "No such file or directory: %s" arg))) + (fixup-autoload-buffer (concat (if autoload-package-name + autoload-package-name + (file-name-nondirectory arg)) + "-autoloads")) + (save-some-buffers t)) + ;; (message "Done") + ))) + (provide 'autoload) ;;; autoload.el ends here