branch: master commit 6c6b7a18e9e3f8c215919fc1bef6f2c0af15e093 Author: Eric Abrahamsen <e...@ericabrahamsen.net> Commit: Eric Abrahamsen <e...@ericabrahamsen.net>
[gnorb] More little tweaks to registry searching, bump to 1.5.2 * packages/gnorb/gnorb-gnus.el (gnorb-gnus-search-registry): Use case-fold-search, better parsing regexp, and be more careful about returning valid results. * packages/gnorb/gnorb-helm.el (gnorb-helm-gnus-registry-candidates): Be more careful about checking gnus-ignored-from-addresses. * packages/gnorb/gnorb.el: Bump to 1.5.2 --- packages/gnorb/gnorb-gnus.el | 79 +++++++++++++++++++++++--------------------- packages/gnorb/gnorb-helm.el | 24 ++++++++++---- packages/gnorb/gnorb.el | 2 +- 3 files changed, 60 insertions(+), 45 deletions(-) diff --git a/packages/gnorb/gnorb-gnus.el b/packages/gnorb/gnorb-gnus.el index 2bbe19f..96d660e 100644 --- a/packages/gnorb/gnorb-gnus.el +++ b/packages/gnorb/gnorb-gnus.el @@ -703,50 +703,55 @@ sender:google.com subject:\"your search results\"" (interactive (list (read-string "Registry search terms: " nil gnorb-registry-search-history))) - (let (parsed found this-pass term) + (let ((case-fold-search t) + parsed found this-pass term) (with-temp-buffer (insert search-string) (goto-char (point-min)) (while (re-search-forward - "\\([[:alpha:]]+\\):\\(\\(?:\\w+\\|\"[[:alpha:] ]+\"\\)\\)" + "\\([[:alpha:]]+\\):\\(\\(?:[^\"[:blank:]]+\\|\"[^\"]+\"\\)\\)" (point-at-eol) t) (push (cons (intern (match-string 1)) (string-trim (match-string 2) "\"" "\"")) - parsed)) - (dolist (sym (slot-value gnus-registry-db 'tracked)) - (when (setq term (cdr-safe (assoc sym parsed))) - (maphash - (lambda (k v) - (when (string-match-p term k) - (setq this-pass (append v this-pass)))) - (gethash sym (slot-value gnus-registry-db 'tracker))) - (setq found (if found - (seq-intersection found this-pass) - this-pass) - this-pass nil))) - (if found - (let* ((server (gnorb-gnus-find-gnorb-server)) - (artlist - (mapcar - (lambda (msg) - (pcase-let ((`(,group . ,artno) (gnorb-msg-id-request-head - msg))) - (when (and artno (integerp artno) (> artno 0)) - (vector group artno 100)))) - (delq nil (delete-dups found)))) - (name (make-temp-name "registry messages")) - (spec (list - (cons 'nnir-specs (list (cons 'nnir-query-spec - `((query . "dummy") - (articles . ,artlist))) - (cons 'nnir-group-spec - `((,server ,(list name)))))) - (cons 'nnir-artlist nil)))) - (switch-to-buffer gnus-group-buffer) - (gnus-group-read-ephemeral-group - name `(nnir ,server) nil `(switch-to-buffer ,gnus-group-buffer) - nil nil spec)) - (message "No results found"))))) + parsed))) + (dolist (sym (slot-value gnus-registry-db 'tracked)) + (when (setq term (cdr-safe (assoc sym parsed))) + (maphash + (lambda (k v) + (when (string-match-p term k) + (setq this-pass (append v this-pass)))) + (gethash sym (slot-value gnus-registry-db 'tracker))) + (setq found (if found + (seq-intersection found this-pass) + this-pass) + this-pass nil))) + (if found + (let* ((server (gnorb-gnus-find-gnorb-server)) + (artlist + (delq + nil + (mapcar + (lambda (msg) + (pcase-let ((`(,group . ,artno) + (gnorb-msg-id-request-head + msg (car-safe + (gnus-registry-get-id-key msg 'group))))) + (when (and group artno (integerp artno) (> artno 0)) + (vector group artno 100)))) + (delq nil (delete-dups found))))) + (name (make-temp-name "registry messages")) + (spec (list + (cons 'nnir-specs (list (cons 'nnir-query-spec + `((query . "dummy") + (articles . ,artlist))) + (cons 'nnir-group-spec + `((,server ,(list name)))))) + (cons 'nnir-artlist nil)))) + (switch-to-buffer gnus-group-buffer) + (gnus-group-read-ephemeral-group + name `(nnir ,server) nil `(switch-to-buffer ,gnus-group-buffer) + nil nil spec)) + (message "No results found")))) ;;;###autoload (defun gnorb-gnus-tag-message (arg &optional tags) diff --git a/packages/gnorb/gnorb-helm.el b/packages/gnorb/gnorb-helm.el index e9eae46..bcae4f9 100644 --- a/packages/gnorb/gnorb-helm.el +++ b/packages/gnorb/gnorb-helm.el @@ -33,18 +33,28 @@ (defun gnorb-helm-gnus-registry-candidates () "Return a list of candidates from the Gnus registry." - (let (ret from recipient subject group) + (let ((check + (when gnus-ignored-from-addresses + (cond ((functionp gnus-ignored-from-addresses) + (lambda (adr) (funcall gnus-ignored-from-addresses adr))) + ((stringp gnus-ignored-from-addresses) + (lambda (adr) + (string-match-p + gnus-ignored-from-addresses adr)))))) + ret from recipient subject group) (maphash (lambda (msg-id data) (when (setq group (car-safe (cdr (assoc 'group data))) from (car-safe (cdr (assoc 'sender data))) subject (car-safe (cdr (assoc 'subject data))) - recipient (car-safe (cdr (assoc 'recipient data)))) - (push (cons (format "%s: %s" - (if (string-match-p gnus-ignored-from-addresses from) - recipient - from) - subject) ; display + recipient (cdr (assoc 'recipient data))) + (push (cons (format + "%s: %s" ; display + (if (and check + (funcall check from)) + (mapconcat #'identity recipient " ") + from) + subject) (cons msg-id group)) ; real ret))) (slot-value gnus-registry-db 'data)) diff --git a/packages/gnorb/gnorb.el b/packages/gnorb/gnorb.el index 2253fb1..fb10287 100644 --- a/packages/gnorb/gnorb.el +++ b/packages/gnorb/gnorb.el @@ -2,7 +2,7 @@ ;; Copyright (C) 2018 Free Software Foundation, Inc. -;; Version: 1.5.1 +;; Version: 1.5.2 ;; Package-Requires: ((cl-lib "0.5")) ;; Maintainer: Eric Abrahamsen <e...@ericabrahamsen.net>