comparison lisp/utils/autoload.el @ 189:489f57a838ef r20-3b21

Import from CVS: tag r20-3b21
author cvs
date Mon, 13 Aug 2007 09:57:07 +0200
parents b405438285a2
children f53b5ca2e663
comparison
equal deleted inserted replaced
188:e29a8e7498d9 189:489f57a838ef
357 (expand-file-name (concat autoload-target-directory 357 (expand-file-name (concat autoload-target-directory
358 cusload-file-name) 358 cusload-file-name)
359 data-directory) 359 data-directory)
360 "*File `update-file-autoloads' puts customization into.") 360 "*File `update-file-autoloads' puts customization into.")
361 361
362 (defvar customized-symbols nil) 362 (defvar customized-symbols (make-hash-table :test 'eq))
363 363
364 ;; Written by Per Abrahamsen 364 ;; Written by Per Abrahamsen
365 (defun autoload-snarf-defcustom (file) 365 (defun autoload-snarf-defcustom (file)
366 "Snarf all customizations in the current buffer." 366 "Snarf all customizations in the current buffer."
367 (let ((visited (get-file-buffer file))) 367 (let ((visited (get-file-buffer file)))
369 (set-buffer (or visited (find-file-noselect file))) 369 (set-buffer (or visited (find-file-noselect file)))
370 (when (and file 370 (when (and file
371 (string-match "\\`\\(.*\\)\\.el\\'" file) 371 (string-match "\\`\\(.*\\)\\.el\\'" file)
372 (not (buffer-modified-p))) 372 (not (buffer-modified-p)))
373 (goto-char (point-min)) 373 (goto-char (point-min))
374 (condition-case nil 374 (let ((name (file-name-nondirectory (match-string 1 file))))
375 (let ((name (file-name-nondirectory (match-string 1 file)))) 375 (condition-case nil
376 (while t 376 (while (re-search-forward
377 "^(defcustom\\|^(defface\\|^(defgroup"
378 nil t)
379 (beginning-of-line)
377 (let ((expr (read (current-buffer)))) 380 (let ((expr (read (current-buffer))))
378 (when (and (listp expr) 381 (eval expr)
379 (memq (car expr) '(defcustom defface defgroup))) 382 (setf (gethash (nth 1 expr) customized-symbols) name)))
380 (eval expr) 383 (error nil))))
381 (put (nth 1 expr) 'custom-where name)
382 (pushnew (nth 1 expr) customized-symbols)))))
383 (error nil)))
384 (unless (buffer-modified-p) 384 (unless (buffer-modified-p)
385 (kill-buffer (current-buffer)))))) 385 (kill-buffer (current-buffer))))))
386 386
387 (defvar autoload-do-custom-save nil) 387 (defvar autoload-do-custom-save nil)
388 388
525 (save-excursion 525 (save-excursion
526 (set-buffer (find-file-noselect generated-custom-file)) 526 (set-buffer (find-file-noselect generated-custom-file))
527 (erase-buffer) 527 (erase-buffer)
528 (insert 528 (insert
529 (with-output-to-string 529 (with-output-to-string
530 (mapcar (lambda (symbol) 530 (mapatoms (lambda (sym)
531 (let ((members (condition-case nil 531 (let ((members (get sym 'custom-group))
532 (get symbol 'custom-group) 532 item where found)
533 (t (progn 533 (when members
534 (message "Bad plist in %s" 534 (while members
535 (symbol-name symbol))) 535 (setq item (car (car members))
536 nil))) 536 members (cdr members)
537 item where 537 where (gethash item customized-symbols))
538 (found (condition-case nil 538 (unless (or (null where)
539 (get symbol 'custom-loads) 539 (member where found))
540 (t nil))) 540 (if found
541 ) 541 (insert " ")
542 (when (or members found) 542 ;;; (insert "(custom-add-loads '" (symbol-name sym)
543 (princ "(custom-put '") 543 (insert "(custom-put '" (symbol-name sym)
544 (princ symbol) 544 " 'custom-loads '("))
545 (princ " 'custom-loads '(") 545 (prin1 where (current-buffer))
546 (when found 546 (push where found)))
547 ;; (message "found = `%s'" found) 547 (when found
548 (insert (mapconcat 'prin1-to-string found " "))) 548 (insert "))\n"))))))
549 (while members 549 ))
550 (setq item (car (car members))
551 members (cdr members)
552 where (get item 'custom-where))
553 (unless (or (null where)
554 (member where found))
555 ;; (message "where = `%s', found = `%s'" where found)
556 (when found
557 (princ " "))
558 (prin1 where)
559 (push where found)))
560 (princ "))\n"))))
561 customized-symbols)))
562 (when (= (point-min) (point-max)) 550 (when (= (point-min) (point-max))
563 (set-buffer-modified-p nil)))) 551 (set-buffer-modified-p nil))))
564 552
565 ;;;###autoload 553 ;;;###autoload
566 (defun batch-update-autoloads () 554 (defun batch-update-autoloads ()
577 (enable-local-eval nil)) ; Don't query in batch mode. 565 (enable-local-eval nil)) ; Don't query in batch mode.
578 (when (file-exists-p generated-custom-file) 566 (when (file-exists-p generated-custom-file)
579 (flet ((custom-put (symbol property value) 567 (flet ((custom-put (symbol property value)
580 (progn 568 (progn
581 (put symbol property value) 569 (put symbol property value)
582 (pushnew symbol customized-symbols)))) 570 (setf (gethash symbol customized-symbols) value))))
583 (load generated-custom-file nil t))) 571 (load generated-custom-file nil t)))
584 ;; (message "Updating autoloads in %s..." generated-autoload-file) 572 ;; (message "Updating autoloads in %s..." generated-autoload-file)
585 (dolist (arg command-line-args-left) 573 (dolist (arg command-line-args-left)
586 (setq arg (expand-file-name arg defdir)) 574 (setq arg (expand-file-name arg defdir))
587 (cond 575 (cond
632 (progn 620 (progn
633 (put symbol property value) 621 (put symbol property value)
634 ;; (message "Loading %s = %s" 622 ;; (message "Loading %s = %s"
635 ;; (symbol-name symbol) 623 ;; (symbol-name symbol)
636 ;; (prin1-to-string value)) 624 ;; (prin1-to-string value))
637 (pushnew symbol customized-symbols)))) 625 (setf (gethash symbol customized-symbols)
626 value))))
638 (load generated-custom-file nil t))) 627 (load generated-custom-file nil t)))
639 (cond 628 (cond
640 ((file-directory-p arg) 629 ((file-directory-p arg)
641 (message "Updating autoloads in directory %s..." arg) 630 (message "Updating autoloads/custom in directory %s..." arg)
642 (update-autoloads-from-directory arg)) 631 (update-autoloads-from-directory arg))
643 (t (error "No such file or directory: %s" arg))) 632 (t (error "No such file or directory: %s" arg)))
644 (when autoload-do-custom-save 633 (when autoload-do-custom-save
645 (autoload-save-customization) 634 (autoload-save-customization)
646 (setq customized-symbols nil)) 635 (clrhash customized-symbols))
647 (fixup-autoload-buffer (concat (if autoload-package-name 636 (fixup-autoload-buffer (concat (if autoload-package-name
648 autoload-package-name 637 autoload-package-name
649 (file-name-nondirectory arg)) 638 (file-name-nondirectory arg))
650 "-autoloads")) 639 "-autoloads"))
651 (save-some-buffers t)) 640 (save-some-buffers t))