Mercurial > emacs
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) |