Function: gnus-post-method
gnus-post-method is a byte-compiled function defined in
gnus-msg.el.gz.
Signature
(gnus-post-method ARG GROUP &optional SILENT)
Documentation
Return the posting method based on GROUP and ARG.
If SILENT, don't prompt the user.
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/gnus-msg.el.gz
(defun gnus-post-method (arg group &optional silent)
"Return the posting method based on GROUP and ARG.
If SILENT, don't prompt the user."
(let ((gnus-post-method (or (gnus-parameter-post-method group)
gnus-post-method))
(group-method (gnus-find-method-for-group group)))
(cond
;; If the group-method is nil (which shouldn't happen) we use
;; the default method.
((null group-method)
(or (and (listp gnus-post-method) ;If not current/native/nil
(not (listp (car gnus-post-method))) ; and not a list of methods
gnus-post-method) ;then use it.
gnus-select-method
message-post-method))
;; We want the inverse of the default
((and arg (not (eq arg 0)))
(if (eq gnus-post-method 'current)
gnus-select-method
group-method))
;; We query the user for a post method.
((or arg
(and (listp gnus-post-method)
(listp (car gnus-post-method))))
(let* ((methods
;; Collect all methods we know about.
(append
(when (listp gnus-post-method)
(if (listp (car gnus-post-method))
gnus-post-method
(list gnus-post-method)))
gnus-secondary-select-methods
(mapcar #'cdr gnus-server-alist)
(mapcar #'car gnus-opened-servers)
(list gnus-select-method)
(list group-method)))
method-alist post-methods method)
;; Weed out all mail methods.
(while methods
(setq method (gnus-server-get-method "" (pop methods)))
(when (and (or (gnus-method-option-p method 'post)
(gnus-method-option-p method 'post-mail))
(not (member method post-methods)))
(push method post-methods)))
;; Create a name-method alist.
(setq method-alist
(mapcar
(lambda (m)
(if (equal (cadr m) "")
(list (symbol-name (car m)) m)
(list (concat (cadr m) " (" (symbol-name (car m)) ")") m)))
post-methods))
;; Query the user.
(cadr
(assoc
(setq gnus-last-posting-server
(if (and silent
gnus-last-posting-server)
;; Just use the last value.
gnus-last-posting-server
(gnus-completing-read
"Posting method" (mapcar #'car method-alist) t
(cons (or gnus-last-posting-server "") 0))))
method-alist))))
;; Override normal method.
((and (eq gnus-post-method 'current)
(not (memq (car group-method) gnus-discouraged-post-methods))
(gnus-get-function group-method 'request-post t))
(cl-assert (not arg))
group-method)
;; Use gnus-post-method.
((listp gnus-post-method) ;A method...
(cl-assert (not (listp (car gnus-post-method)))) ;... not a list of methods.
gnus-post-method)
;; Use the normal select method (nil or native).
(t gnus-select-method))))