Function: mail-source-set-1
mail-source-set-1 is a byte-compiled function defined in
mail-source.el.gz.
Signature
(mail-source-set-1 SOURCE)
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/mail-source.el.gz
(defun mail-source-set-1 (source)
(let* ((type (pop source))
(defaults (cdr (assq type mail-source-keyword-map)))
(search '(:max 1))
found default value keyword user-auth pass-auth) ;; auth-info
;; append to the search the useful info from the source and the defaults:
;; user, host, and port
;; the msname is the mail-source parameter
(dolist (msname '(:server :user :port))
;; the asname is the auth-source parameter
(let* ((asname (cl-case msname
(:server :host) ; auth-source uses :host
(t msname)))
;; this is the mail-source default
(msdef1 (or (plist-get source msname)
(nth 1 (assoc msname defaults))))
;; ...evaluated
(msdef (mail-source-value msdef1)))
(setq search (append (list asname
(if msdef msdef t))
search))))
;; if the port is unknown yet, get it from the mail-source type
(unless (plist-get search :port)
(setq search (append (list :port (symbol-name type)))))
(while (setq default (pop defaults))
;; for each default :SYMBOL, set SYMBOL to the plist value for :SYMBOL
;; using `mail-source-value' to evaluate the plist value
(set (mail-source-strip-keyword (setq keyword (car default)))
;; note the following reasons for this structure:
;; 1) the auth-sources user and password override everything
;; 2) it avoids macros, so it's cleaner
;; 3) it falls through to the mail-sources and then default values
(cond
((and
(eq keyword :user)
(setq user-auth
(plist-get
;; cache the search result in `found'
(or found
(setq found (nth 0 (apply #'auth-source-search
search))))
:user)))
user-auth)
((and
(eq keyword :password)
(setq pass-auth
(plist-get
;; cache the search result in `found'
(or found
(setq found (nth 0 (apply #'auth-source-search
search))))
:secret)))
;; maybe set the password to the return of the :secret function
(if (functionp pass-auth)
(setq pass-auth (funcall pass-auth))
pass-auth))
(t (if (setq value (plist-get source keyword))
(mail-source-value value)
(mail-source-value (cadr default)))))))))