comparison lisp/gnus/mail-source.el @ 94451:760ef541936c

Merge from gnus--devo--0 Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1131
author Miles Bader <miles@gnu.org>
date Tue, 29 Apr 2008 01:03:33 +0000
parents 86c0a3e7c039
children f42ef85caf91
comparison
equal deleted inserted replaced
94450:2ecc5f114429 94451:760ef541936c
449 449
450 The variables bound and their default values are described by 450 The variables bound and their default values are described by
451 the `mail-source-keyword-map' variable." 451 the `mail-source-keyword-map' variable."
452 `(let* ,(mail-source-bind-1 (car type-source)) 452 `(let* ,(mail-source-bind-1 (car type-source))
453 (mail-source-set-1 ,(cadr type-source)) 453 (mail-source-set-1 ,(cadr type-source))
454 (let ((user (or 454 ,@body))
455 (auth-source-user-or-password
456 "login"
457 server ; this is "host" in auth-sources
458 ',(car type-source))
459 user))
460 (password (or
461 (auth-source-user-or-password
462 "password"
463 server ; this is "host" in auth-sources
464 ',(car type-source))
465 password)))
466 ,@body)))
467 455
468 (put 'mail-source-bind 'lisp-indent-function 1) 456 (put 'mail-source-bind 'lisp-indent-function 1)
469 (put 'mail-source-bind 'edebug-form-spec '(sexp body)) 457 (put 'mail-source-bind 'edebug-form-spec '(sexp body))
470 458
471 (defun mail-source-set-1 (source) 459 (defun mail-source-set-1 (source)
472 (let* ((type (pop source)) 460 (let* ((type (pop source))
473 (defaults (cdr (assq type mail-source-keyword-map))) 461 (defaults (cdr (assq type mail-source-keyword-map)))
474 default value keyword) 462 default value keyword user-auth pass-auth)
475 (while (setq default (pop defaults)) 463 (while (setq default (pop defaults))
476 ;; for each default :SYMBOL, set SYMBOL to the plist value for :SYMBOL 464 ;; for each default :SYMBOL, set SYMBOL to the plist value for :SYMBOL
477 ;; using `mail-source-value' to evaluate the plist value 465 ;; using `mail-source-value' to evaluate the plist value
478 (set (mail-source-strip-keyword (setq keyword (car default))) 466 (set (mail-source-strip-keyword (setq keyword (car default)))
479 (if (setq value (plist-get source keyword)) 467 ;; note the following reasons for this structure:
480 (mail-source-value value) 468 ;; 1) the auth-sources user and password override everything
481 (mail-source-value (cadr default))))))) 469 ;; 2) it avoids macros, so it's cleaner
470 ;; 3) it falls through to the mail-sources and then default values
471 (cond
472 ((and
473 (eq keyword :user)
474 (setq user-auth
475 (auth-source-user-or-password
476 "login"
477 ;; this is "host" in auth-sources
478 (if (boundp 'server) (symbol-value 'server) "")
479 type)))
480 user-auth)
481 ((and
482 (eq keyword :password)
483 (setq pass-auth
484 (auth-source-user-or-password
485 "password"
486 ;; this is "host" in auth-sources
487 (if (boundp 'server) (symbol-value 'server) "")
488 type)))
489 pass-auth)
490 (t (if (setq value (plist-get source keyword))
491 (mail-source-value value)
492 (mail-source-value (cadr default)))))))))
482 493
483 (eval-and-compile 494 (eval-and-compile
484 (defun mail-source-bind-common-1 () 495 (defun mail-source-bind-common-1 ()
485 (let* ((defaults mail-source-common-keyword-map) 496 (let* ((defaults mail-source-common-keyword-map)
486 default bind) 497 default bind)