Function: gnus-server-to-method

gnus-server-to-method is a byte-compiled function defined in gnus.el.gz.

Signature

(gnus-server-to-method SERVER)

Documentation

Map virtual server names to select methods.

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus.el.gz
(defsubst gnus-server-to-method (server)
  "Map virtual server names to select methods."
  (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))
	      ;; This could be some sort of foreign server that I
	      ;; simply haven't opened (yet).  Do a brute-force scan
	      ;; of the entire gnus-newsrc-alist for the server name
	      ;; of every method.  As a side-effect, loads the
	      ;; gnus-server-method-cache so this only happens once,
	      ;; if at all.
	      (let ((alist (cdr gnus-newsrc-alist))
		    method match)
		(while alist
		  (setq method (gnus-info-method (pop alist)))
		  (when (and (not (stringp method))
			     (equal server
				    (gnus-method-to-server method nil t)))
		    (setq match method
			  alist nil)))
		match))))
	(when (and result
		   (not (assoc server gnus-server-method-cache)))
	  (push (cons server result) gnus-server-method-cache))
	result)))