(gnus-compile): Don't modify the value of `gnus-format-specs', generate
authoryamaoka <yamaoka>
Thu, 9 Mar 2000 03:10:07 +0000 (03:10 +0000)
committeryamaoka <yamaoka>
Thu, 9 Mar 2000 03:10:07 +0000 (03:10 +0000)
compiled specs in `gnus-format-specs-compiled' instead;
don't touch the dribble buffer.
(gnus-update-format-specifications): Bind `gnus-format-specs' to
`gnus-format-specs-compiled' if the latter is non-nil;
use `gnus-update-format-specifications-1'.
(gnus-update-format-specifications-1): Rename from
`gnus-update-format-specifications';
update the value of `gnus-newsrc-file-version' if the updating is forced.
(gnus-format-specs-compiled): New internal variable.

lisp/gnus-spec.el

index d007f02..c78fd17 100644 (file)
             ,gnus-summary-line-format-spec))
   "Alist of format specs.")
 
+(defvar gnus-format-specs-compiled nil
+  "Alist of compiled format specs.")
+
 (defvar gnus-article-mode-line-format-spec nil)
 (defvar gnus-summary-mode-line-format-spec nil)
 (defvar gnus-group-mode-line-format-spec nil)
     (lisp-interaction-mode)
     (insert (pp-to-string spec))))
 
-(defun gnus-update-format-specifications (&optional force &rest types)
+(defun gnus-update-format-specifications-1 (force types)
   "Update all (necessary) format specifications."
   ;; Make the indentation array.
   ;; See whether all the stored info needs to be flushed.
                        (cdr (assq 'version gnus-format-specs))))
            (not (equal gnus-version gnus-newsrc-file-version)))
     (message "%s" "Force update format specs.")
-    (setq gnus-format-specs nil))
+    (setq gnus-format-specs nil
+         gnus-newsrc-file-version gnus-version))
 
   ;; Go through all the formats and see whether they need updating.
   (let (new-format entry type val)
   (unless (assq 'version gnus-format-specs)
     (push (cons 'version emacs-version) gnus-format-specs)))
 
+(defun gnus-update-format-specifications (&optional force &rest types)
+  "Update all (necessary) format specifications."
+  (if gnus-format-specs-compiled
+      (let ((gnus-format-specs gnus-format-specs-compiled))
+       (gnus-update-format-specifications-1 force types))
+    (gnus-update-format-specifications-1 force types)))
+
 (defvar gnus-mouse-face-0 'highlight)
 (defvar gnus-mouse-face-1 'highlight)
 (defvar gnus-mouse-face-2 'highlight)
@@ -533,6 +544,7 @@ If PROPS, insert the result."
     (save-excursion
       (gnus-message 7 "Compiling format specs...")
 
+      (setq gnus-format-specs-compiled nil)
       (while entries
        (setq entry (pop entries))
        (if (memq (car entry) '(version gnus-version))
@@ -546,11 +558,12 @@ If PROPS, insert the result."
                                 (byte-code-function-p (cadr form)))))
              (fset 'gnus-tmp-func `(lambda () ,form))
              (byte-compile 'gnus-tmp-func)
-             (setcar (cddr entry) (gnus-byte-code 'gnus-tmp-func))))))
+             (push (nconc (butlast entry)
+                          (list (gnus-byte-code 'gnus-tmp-func)))
+                   gnus-format-specs-compiled)))))
 
       (push (cons 'version emacs-version) gnus-format-specs)
-      ;; Mark the .newsrc.eld file as "dirty".
-      (gnus-dribble-touch)
+      (push (cons 'version emacs-version) gnus-format-specs-compiled)
       (gnus-message 7 "Compiling user specs...done"))))
 
 (defun gnus-set-format (type &optional insertable)