Function: nnmaildir-open-server

nnmaildir-open-server is a byte-compiled function defined in nnmaildir.el.gz.

Signature

(nnmaildir-open-server SERVER-STRING &optional DEFS)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/nnmaildir.el.gz
(defun nnmaildir-open-server (server-string &optional defs)
  (let ((server (alist-get server-string nnmaildir--servers
			   nil nil #'equal))
	dir size x prefix)
    (catch 'return
      (if server
	  (and (nnmaildir--srv-groups server)
	       (setq nnmaildir--cur-server server)
	       (throw 'return t))
	(setq server (make-nnmaildir--srv :address server-string))
	(let ((inhibit-quit t))
	  (setf (alist-get server-string nnmaildir--servers
			   nil nil #'equal)
		server)))
      (setq dir (assq 'directory defs))
      (unless dir
	(setf (nnmaildir--srv-error server)
	      "You must set \"directory\" in the select method")
	(throw 'return nil))
      (setq dir (cadr dir)
	    dir (eval dir t)	;FIXME: Why `eval'?
	    dir (expand-file-name dir)
	    dir (file-name-as-directory dir))
      (unless (file-exists-p dir)
	(setf (nnmaildir--srv-error server) (concat "No such directory: " dir))
	(throw 'return nil))
      (setf (nnmaildir--srv-dir server) dir)
      (setq x (assq 'directory-files defs))
      (if (null x)
	  (setq x (if nnheader-directory-files-is-safe 'directory-files
		    'nnheader-directory-files-safe))
	(setq x (cadr x))
	(unless (functionp x)
	  (setf (nnmaildir--srv-error server)
		(concat "Not a function: " (prin1-to-string x)))
	  (throw 'return nil)))
      (setf (nnmaildir--srv-ls server) x)
      (setq size (length (funcall x dir nil "\\`[^.]" 'nosort)))
      (and (setq x (assq 'get-new-mail defs))
	   (setq x (cdr x))
	   (car x)
	   (setf (nnmaildir--srv-gnm server) t)
	   (require 'nnmail))
      (setf prefix (cl-second (assq 'target-prefix defs))
            (nnmaildir--srv-target-prefix server)
            (if prefix
                (eval prefix t)
              ""))
      (setf (nnmaildir--srv-groups server)
	    (gnus-make-hashtable size))
      (setq nnmaildir--cur-server server)
      t)))