From fb3026c3571f61a9878777fa53b5fd2ad26ede2f Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Fri, 25 Jan 2002 06:31:11 +0000 Subject: [PATCH] * gnus-range.el (gnus-inverse-list-range-intersection): Off-by-one error. * gnus.el (gnus-server-to-method): Made into subst. (gnus-server-method-cache): New variable. (gnus-server-to-method): Use it. (gnus-group-method-cache): New variable. (gnus-find-method-for-group-1): Renamed. (gnus-find-method-for-group): New function. (gnus-group-method-cache): Removed. --- lisp/ChangeLog | 11 ++++++++++ lisp/dgnushack.el | 6 ++++++ lisp/gnus-range.el | 2 +- lisp/gnus-start.el | 1 + lisp/gnus.el | 54 +++++++++++++++++++++++++--------------------- 5 files changed, 48 insertions(+), 26 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 754a03e04..79c54972c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,16 @@ 2002-01-25 Lars Magne Ingebrigtsen + * gnus-range.el (gnus-inverse-list-range-intersection): Off-by-one + error. + + * gnus.el (gnus-server-to-method): Made into subst. + (gnus-server-method-cache): New variable. + (gnus-server-to-method): Use it. + (gnus-group-method-cache): New variable. + (gnus-find-method-for-group-1): Renamed. + (gnus-find-method-for-group): New function. + (gnus-group-method-cache): Removed. + * gnus-sum.el (gnus-compute-unseen-list): Use new optimized function. diff --git a/lisp/dgnushack.el b/lisp/dgnushack.el index 2eb50c468..b06582e1d 100644 --- a/lisp/dgnushack.el +++ b/lisp/dgnushack.el @@ -189,6 +189,12 @@ (t (concat filename ".elc")))) (require 'bytecomp) +(require 'byte-opt) +;; To avoid having defsubsts and inlines happen. +;(defun byte-optimize-inline-handler (form) +; "byte-optimize-handler for the `inline' special-form." +; (cons 'progn (cdr form))) +;(defalias 'byte-compile-file-form-defsubst 'byte-compile-file-form-defun) (push srcdir load-path) (load (expand-file-name "lpath.el" srcdir) nil t) diff --git a/lisp/gnus-range.el b/lisp/gnus-range.el index a51b7eef5..8e3c0972f 100644 --- a/lisp/gnus-range.el +++ b/lisp/gnus-range.el @@ -355,7 +355,7 @@ LIST is a sorted list." (when (or (not ranges) (if (numberp (car ranges)) (not (= (car ranges) number)) - (not (< number (cdar ranges))))) + (not (<= number (cdar ranges))))) (push number result))) (nreverse result))) diff --git a/lisp/gnus-start.el b/lisp/gnus-start.el index 295d4c94f..d90e1e16b 100644 --- a/lisp/gnus-start.el +++ b/lisp/gnus-start.el @@ -1550,6 +1550,7 @@ newsgroup." ;; Go though `gnus-newsrc-alist' and compare with `gnus-active-hashtb' ;; and compute how many unread articles there are in each group. (defun gnus-get-unread-articles (&optional level) + (setq gnus-server-method-cache nil) (let* ((newsrc (cdr gnus-newsrc-alist)) (level (or level gnus-activate-level (1+ gnus-level-subscribed))) (foreign-level diff --git a/lisp/gnus.el b/lisp/gnus.el index 627c327d6..837fd0912 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -1786,6 +1786,7 @@ covered by that variable." (defvar gnus-original-article-buffer " *Original Article*") (defvar gnus-newsgroup-name nil) (defvar gnus-ephemeral-servers nil) +(defvar gnus-server-method-cache nil) (defvar gnus-agent nil "Whether we want to use the Gnus agent or not.") @@ -2680,32 +2681,35 @@ that that variable is buffer-local to the summary buffers." (t (gnus-server-add-address method)))) -(defun gnus-server-to-method (server) +(defsubst gnus-server-to-method (server) "Map virtual server names to select methods." - (or - ;; Is this a method, perhaps? - (and server (listp server) server) - ;; Perhaps this is the native server? - (and (equal server "native") gnus-select-method) - ;; It should be in the server alist. - (cdr (assoc server gnus-server-alist)) - ;; It could be in the predefined server alist. - (cdr (assoc server gnus-predefined-server-alist)) - ;; If not, we look through all the opened server - ;; to see whether we can find it there. - (let ((opened gnus-opened-servers)) - (while (and opened - (not (equal server (format "%s:%s" (caaar opened) - (cadaar opened))))) - (pop opened)) - (caar opened)) - ;; It could be a named method, search all servers - (let ((servers gnus-secondary-select-methods)) - (while (and servers - (not (equal server (format "%s:%s" (caar servers) - (cadar servers))))) - (pop servers)) - (car servers)))) + (or (and server (listp server) server) + (cdr (assoc server gnus-server-method-cache)) + (let ((result + (or + ;; Perhaps this is the native server? + (and (equal server "native") gnus-select-method) + ;; It should be in the server alist. + (cdr (assoc server gnus-server-alist)) + ;; It could be in the predefined server alist. + (cdr (assoc server gnus-predefined-server-alist)) + ;; If not, we look through all the opened server + ;; to see whether we can find it there. + (let ((opened gnus-opened-servers)) + (while (and opened + (not (equal server (format "%s:%s" (caaar opened) + (cadaar opened))))) + (pop opened)) + (caar opened)) + ;; It could be a named method, search all servers + (let ((servers gnus-secondary-select-methods)) + (while (and servers + (not (equal server (format "%s:%s" (caar servers) + (cadar servers))))) + (pop servers)) + (car servers))))) + (push (cons server result) gnus-server-method-cache) + result))) (defmacro gnus-method-equal (ss1 ss2) "Say whether two servers are equal." -- 2.25.1