diff options
author | Andrew G Cohen <cohen@andy.bu.edu> | 2020-09-05 08:46:43 +0800 |
---|---|---|
committer | Andrew G Cohen <cohen@andy.bu.edu> | 2020-09-05 08:46:43 +0800 |
commit | ecfc13e41627511769e00a2d0a7568d5bdbe8a0d (patch) | |
tree | 0594654501fdfb3ded9233a01fecd96ef9924e5a /lisp/gnus/gnus-msg.el | |
parent | f450798cb0b9bedfa73efff14605a04eec4f1d9e (diff) | |
download | emacs-ecfc13e41627511769e00a2d0a7568d5bdbe8a0d.tar.gz emacs-ecfc13e41627511769e00a2d0a7568d5bdbe8a0d.tar.bz2 emacs-ecfc13e41627511769e00a2d0a7568d5bdbe8a0d.zip |
Introduce nnselect backend for gnus
This new backend allows gnus to handle arbitrary sets of messages
spanning multiple groups, even when these groups are from different
backends and different servers. All gnus glue is removed from
nnir (leaving only the backend search functions) and gnus
search-related processing is done through nnselect. In appropriate
places 'nnir' has been replaced by 'nnselect' or 'search'.
* etc/NEWS: Document the change.
* doc/misc/gnus.texi: New documentation for nnselect and update
searching and thread-referral sections.
* lisp/gnus/nnselect.el: New file.
* lisp/gnus/nnir.el: Remove all gnus glue, leaving only searching
capability. Improve documentation strings.
* lisp/gnus/gnus-group.el (gnus-group-read-ephemeral-search-group,
gnus-group-make-search-group): New functions.
* lisp/gnus/gnus-msg.el (gnus-setup-message, gnus-group-news,
gnus-summary-news-other-window): Update to work for nnselect. Fix
gnus-newsgroup-name wrangling.
*lisp/gnus/gnus-registry.el
(gnus-registry-action,gnus-registry-ignore-group-p): Make work from nnselect.
* lisp/gnus/nnheader.el (nnheader-parse-head, nnheader-parse-nov):
Rework and consolidate header parsing.
* lisp/gnus/gnus-agent.el (gnus-agent-regenerate-group):
* lisp/gnus/gnus-cache.el (gnus-possibly-enter-article):
* lisp/gnus/gnus-cloud.el (gnus-cloud-available-chunks):
* lisp/gnus/gnus-msg.el (gnus-inews-yank-articles):
* lisp/gnus/gnus-sum. (gnus-get-newsgroup-headers):
* lisp/gnus/nndiary.el (nndiary-parse-head):
* lisp/gnus/nnfolder.el (nnfolder-parse-head):
* lisp/gnus/nnmaildir.el (nnmaildir--update-nov):
* lisp/gnus/nnml.el (nnml-parse-head):
* lisp/gnus/nnspool.el (nnspool-insert-nov-head):
Use new header parsing.
* lisp/gnus/gnus-start.el (gnus-read-active-for-groups): Rescan on
activation by default.
* lisp/gnus/gnus-sum.el (gnus-summary-line-format-alist): New specs
for virtual groups.
(gnus-article-sort-by-rsv, gnus-thread-sort-by-rsv): New functions to
allow sorting by search RSV.
Diffstat (limited to 'lisp/gnus/gnus-msg.el')
-rw-r--r-- | lisp/gnus/gnus-msg.el | 120 |
1 files changed, 53 insertions, 67 deletions
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el index e770abc2cdf..7bc7fb5be41 100644 --- a/lisp/gnus/gnus-msg.el +++ b/lisp/gnus/gnus-msg.el @@ -393,10 +393,9 @@ only affect the Gcc copy, but not the original message." (gnus-inews-make-draft-meta-information ,gnus-newsgroup-name ',articles))) -(autoload 'nnir-article-number "nnir" nil nil 'macro) -(autoload 'nnir-article-group "nnir" nil nil 'macro) -(autoload 'gnus-nnir-group-p "nnir") - +(autoload 'nnselect-article-number "nnselect" nil nil 'macro) +(autoload 'nnselect-article-group "nnselect" nil nil 'macro) +(autoload 'gnus-nnselect-group-p "nnselect") (defvar gnus-article-reply nil) (defmacro gnus-setup-message (config &rest forms) @@ -404,22 +403,24 @@ only affect the Gcc copy, but not the original message." (winconf-name (make-symbol "gnus-setup-message-winconf-name")) (buffer (make-symbol "gnus-setup-message-buffer")) (article (make-symbol "gnus-setup-message-article")) + (oarticle (make-symbol "gnus-setup-message-oarticle")) (yanked (make-symbol "gnus-setup-yanked-articles")) (group (make-symbol "gnus-setup-message-group"))) `(let ((,winconf (current-window-configuration)) (,winconf-name gnus-current-window-configuration) (,buffer (buffer-name (current-buffer))) - (,article (if (and (gnus-nnir-group-p gnus-newsgroup-name) - gnus-article-reply) - (nnir-article-number (or (car-safe gnus-article-reply) - gnus-article-reply)) - gnus-article-reply)) + (,article (when gnus-article-reply + (or (nnselect-article-number + (or (car-safe gnus-article-reply) + gnus-article-reply)) + gnus-article-reply))) + (,oarticle gnus-article-reply) (,yanked gnus-article-yanked-articles) - (,group (if (and (gnus-nnir-group-p gnus-newsgroup-name) - gnus-article-reply) - (nnir-article-group (or (car-safe gnus-article-reply) - gnus-article-reply)) - gnus-newsgroup-name)) + (,group (when gnus-article-reply + (or (nnselect-article-group + (or (car-safe gnus-article-reply) + gnus-article-reply)) + gnus-newsgroup-name))) (message-header-setup-hook (copy-sequence message-header-setup-hook)) (mbl mml-buffer-list) @@ -460,24 +461,23 @@ only affect the Gcc copy, but not the original message." (unwind-protect (progn ,@forms) - (gnus-inews-add-send-actions ,winconf ,buffer ,article ,config + (gnus-inews-add-send-actions ,winconf ,buffer ,oarticle ,config ,yanked ,winconf-name) (setq gnus-message-buffer (current-buffer)) (set (make-local-variable 'gnus-message-group-art) (cons ,group ,article)) - (set (make-local-variable 'gnus-newsgroup-name) ,group) - ;; Enable highlighting of different citation levels - (when gnus-message-highlight-citation - (gnus-message-citation-mode 1)) - (gnus-run-hooks 'gnus-message-setup-hook) - (if (eq major-mode 'message-mode) - (let ((mbl1 mml-buffer-list)) - (setq mml-buffer-list mbl) ;; Global value - (set (make-local-variable 'mml-buffer-list) mbl1);; Local value - (add-hook 'change-major-mode-hook 'mml-destroy-buffers nil t) - (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t)) - (mml-destroy-buffers) - (setq mml-buffer-list mbl))) + ;; Enable highlighting of different citation levels + (when gnus-message-highlight-citation + (gnus-message-citation-mode 1)) + (gnus-run-hooks 'gnus-message-setup-hook) + (if (eq major-mode 'message-mode) + (let ((mbl1 mml-buffer-list)) + (setq mml-buffer-list mbl) ;; Global value + (set (make-local-variable 'mml-buffer-list) mbl1);; Local value + (add-hook 'change-major-mode-hook 'mml-destroy-buffers nil t) + (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t)) + (mml-destroy-buffers) + (setq mml-buffer-list mbl))) (message-hide-headers) (gnus-add-buffer) (gnus-configure-windows ,config t) @@ -521,12 +521,10 @@ instead." mail-buf) (unwind-protect (progn - (setq gnus-newsgroup-name "") + (let ((gnus-newsgroup-name "")) (gnus-setup-message 'message (message-mail to subject other-headers continue - nil yank-action send-actions return-action))) - (with-current-buffer buf - (setq gnus-newsgroup-name group-name))) + nil yank-action send-actions return-action))))) (when switch-action (setq mail-buf (current-buffer)) (switch-to-buffer buf) @@ -617,18 +615,15 @@ If ARG is 1, prompt for a group name to find the posting style." (buffer (current-buffer))) (unwind-protect (progn - (setq gnus-newsgroup-name - (if arg - (if (= 1 (prefix-numeric-value arg)) - (gnus-group-completing-read - "Use posting style of group" - nil (gnus-read-active-file-p)) - (gnus-group-group-name)) - "")) - ;; #### see comment in gnus-setup-message -- drv - (gnus-setup-message 'message (message-mail))) - (with-current-buffer buffer - (setq gnus-newsgroup-name group))))) + (let ((gnus-newsgroup-name + (if arg + (if (= 1 (prefix-numeric-value arg)) + (gnus-group-completing-read + "Use posting style of group" + nil (gnus-read-active-file-p)) + (gnus-group-group-name)) + ""))) + (gnus-setup-message 'message (message-mail))))))) (defun gnus-group-news (&optional arg) "Start composing a news. @@ -647,19 +642,16 @@ network. The corresponding back end must have a `request-post' method." (buffer (current-buffer))) (unwind-protect (progn - (setq gnus-newsgroup-name + (let ((gnus-newsgroup-name (if arg (if (= 1 (prefix-numeric-value arg)) (gnus-group-completing-read "Use group" nil (gnus-read-active-file-p)) (gnus-group-group-name)) - "")) - ;; #### see comment in gnus-setup-message -- drv + ""))) (gnus-setup-message 'message - (message-news (gnus-group-real-name gnus-newsgroup-name)))) - (with-current-buffer buffer - (setq gnus-newsgroup-name group))))) + (message-news (gnus-group-real-name gnus-newsgroup-name)))))))) (defun gnus-group-post-news (&optional arg) "Start composing a message (a news by default). @@ -694,18 +686,15 @@ posting style." (buffer (current-buffer))) (unwind-protect (progn - (setq gnus-newsgroup-name + (let ((gnus-newsgroup-name (if arg (if (= 1 (prefix-numeric-value arg)) (gnus-group-completing-read "Use group" nil (gnus-read-active-file-p)) "") - gnus-newsgroup-name)) - ;; #### see comment in gnus-setup-message -- drv - (gnus-setup-message 'message (message-mail))) - (with-current-buffer buffer - (setq gnus-newsgroup-name group))))) + gnus-newsgroup-name))) + (gnus-setup-message 'message (message-mail))))))) (defun gnus-summary-news-other-window (&optional arg) "Start composing a news in another window. @@ -724,24 +713,21 @@ network. The corresponding back end must have a `request-post' method." (buffer (current-buffer))) (unwind-protect (progn - (setq gnus-newsgroup-name + (let ((gnus-newsgroup-name (if arg (if (= 1 (prefix-numeric-value arg)) (gnus-group-completing-read "Use group" nil (gnus-read-active-file-p)) "") - gnus-newsgroup-name)) - ;; #### see comment in gnus-setup-message -- drv + gnus-newsgroup-name))) (gnus-setup-message 'message (progn (message-news (gnus-group-real-name gnus-newsgroup-name)) (set (make-local-variable 'gnus-discouraged-post-methods) (remove (car (gnus-find-method-for-group gnus-newsgroup-name)) - gnus-discouraged-post-methods))))) - (with-current-buffer buffer - (setq gnus-newsgroup-name group))))) + gnus-discouraged-post-methods))))))))) (defun gnus-summary-post-news (&optional arg) "Start composing a message. Post to the current group by default. @@ -823,7 +809,7 @@ active, the entire article will be yanked." (with-current-buffer gnus-article-copy (save-restriction (nnheader-narrow-to-headers) - (nnheader-parse-naked-head))))) + (nnheader-parse-head t))))) (message-yank-original) (message-exchange-point-and-mark) (setq beg (or beg (mark t)))) @@ -1993,10 +1979,10 @@ process-mark several articles, they will all be attached." (gnus-summary-iterate n (gnus-summary-select-article) (with-current-buffer destination - ;; Attach at the end of the buffer. - (save-excursion - (goto-char (point-max)) - (message-forward-make-body-mime gnus-original-article-buffer)))) + ;; Attach at the end of the buffer. + (save-excursion + (goto-char (point-max)) + (message-forward-make-body-mime gnus-original-article-buffer)))) (gnus-configure-windows 'message t))) (provide 'gnus-msg) |