Function: gnus-search-server-to-engine

gnus-search-server-to-engine is an autoloaded and byte-compiled function defined in gnus-search.el.gz.

Signature

(gnus-search-server-to-engine SRV)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-search.el.gz
;; This should be done once at Gnus startup time, when the servers are
;; first opened, and the resulting engine instance attached to the
;; server.
(defun gnus-search-server-to-engine (srv)
  (let* ((method (gnus-server-to-method srv))
	 (engine-config (assoc 'gnus-search-engine (cddr method)))
	 (server (or (cdr-safe
		      (assoc-string srv gnus-search-engine-instance-alist t))
		     (nth 1 engine-config)
		     (cdr-safe (assoc (car method) gnus-search-default-engines))
		     (when-let ((old (assoc 'nnir-search-engine
					    (cddr method))))
		       (nnheader-message
			8 "\"nnir-search-engine\" is no longer a valid parameter")
		       (nth 1 old))))
	 inst)
    (setq server
	  (pcase server
	    ('notmuch 'gnus-search-notmuch)
	    ('namazu 'gnus-search-namazu)
	    ('find-grep 'gnus-search-find-grep)
	    ('imap 'gnus-search-imap)
	    (_ server))
	  inst
	  (cond
	   ((null server) nil)
	   ((eieio-object-p server)
	    server)
	   ((class-p server)
	    (make-instance server))
	   (t nil)))
    (if inst
	(unless (assoc-string srv gnus-search-engine-instance-alist t)
	  (when (cddr engine-config)
	    ;; We're not being completely backward-compatible here,
	    ;; because we're not checking for nnir-specific config
	    ;; options in the server definition.
	    (pcase-dolist (`(,key ,value) (cddr engine-config))
	      (condition-case nil
		  (setf (slot-value inst key) value)
		((invalid-slot-name invalid-slot-type)
		 (nnheader-report 'search
		  "Invalid search engine parameter: (%s %s)"
		  key value)))))
	  (push (cons srv inst) gnus-search-engine-instance-alist))
      (signal 'gnus-search-config-error
	      (list (format-message
		     "No search engine configured for %s" srv))))
    inst))