Function: nnir-run-namazu
nnir-run-namazu is a byte-compiled function defined in nnir.el.gz.
Signature
(nnir-run-namazu QUERY SERVER &optional GROUP)
Documentation
Run QUERY on SERVER against Namazu.
Returns a vector of (group name, file name) pairs (also vectors, actually).
Tested with Namazu 2.0.6 on a GNU/Linux system.
Source Code
;; Defined in /usr/src/emacs/lisp/obsolete/nnir.el.gz
;; Namazu interface
(defun nnir-run-namazu (query server &optional _group)
"Run QUERY on SERVER against Namazu.
Returns a vector of (group name, file name) pairs (also vectors,
actually).
Tested with Namazu 2.0.6 on a GNU/Linux system."
;; (when group
;; (error "The Namazu backend cannot search specific groups"))
(save-excursion
(let ((article-pattern (if (string-match "\\`nnmaildir:"
(gnus-group-server server))
":[0-9]+"
"^[0-9]+$"))
artlist
(qstring (cdr (assq 'query query)))
(prefix (nnir-read-server-parm 'nnir-namazu-remove-prefix server))
score group article
(process-environment (copy-sequence process-environment)))
(setenv "LC_MESSAGES" "C")
(set-buffer (gnus-get-buffer-create nnir-tmp-buffer))
(erase-buffer)
(let* ((cp-list
`( ,nnir-namazu-program
nil ; input from /dev/null
t ; output
nil ; don't redisplay
"-q" ; don't be verbose
"-a" ; show all matches
"-s" ; use short format
,@(nnir-read-server-parm 'nnir-namazu-additional-switches server)
,qstring ; the query, in namazu format
,(nnir-read-server-parm 'nnir-namazu-index-directory server) ; index directory
))
(exitstatus
(progn
(message "%s args: %s" nnir-namazu-program
(mapconcat #'identity (nthcdr 4 cp-list) " "))
(apply #'call-process cp-list))))
(unless (or (null exitstatus)
(zerop exitstatus))
(nnheader-report 'nnir "Couldn't run namazu: %s" exitstatus)
;; Namazu failure reason is in this buffer, show it if
;; the user wants it.
(when (> gnus-verbose 6)
(display-buffer nnir-tmp-buffer))))
;; Namazu output looks something like this:
;; 2. Re: Gnus agent expire broken (score: 55)
;; /home/henrik/Mail/mail/sent/1310 (4,138 bytes)
(goto-char (point-min))
(while (re-search-forward
"^\\([0-9,]+\\.\\).*\\((score: \\([0-9]+\\)\\))\n\\([^ ]+\\)"
nil t)
(setq score (match-string 3)
group (file-name-directory (match-string 4))
article (file-name-nondirectory (match-string 4)))
;; make sure article and group is sane
(when (and (string-match article-pattern article)
(not (null group)))
(nnir-add-result group article score prefix server artlist)))
;; sort artlist by score
(apply #'vector
(sort artlist
(lambda (x y)
(> (nnir-artitem-rsv x)
(nnir-artitem-rsv y))))))))