* Summary by thread in rmail @ 2022-10-05 18:31 Andrea Monaco 2022-10-05 18:49 ` Eli Zaretskii ` (2 more replies) 0 siblings, 3 replies; 83+ messages in thread From: Andrea Monaco @ 2022-10-05 18:31 UTC (permalink / raw) To: emacs-devel Can rmail display a summary by thread? That would be useful to me, and I'm willing to work on it. Andrea Monaco ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: Summary by thread in rmail 2022-10-05 18:31 Summary by thread in rmail Andrea Monaco @ 2022-10-05 18:49 ` Eli Zaretskii 2022-10-05 23:40 ` Emanuel Berg 2022-10-06 22:04 ` Richard Stallman 2 siblings, 0 replies; 83+ messages in thread From: Eli Zaretskii @ 2022-10-05 18:49 UTC (permalink / raw) To: Andrea Monaco; +Cc: emacs-devel > From: Andrea Monaco <andrea.monaco@autistici.org> > Date: Wed, 05 Oct 2022 20:31:50 +0200 > > Can rmail display a summary by thread? Not really. There's "C-M-t TOPIC RET", but it matches TOPIC against the Subject of the messages, so it only works as long as people didn't change Subject mid-thread. > That would be useful to me, and I'm willing to work on it. Thanks, adding that would be useful, I think. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: Summary by thread in rmail 2022-10-05 18:31 Summary by thread in rmail Andrea Monaco 2022-10-05 18:49 ` Eli Zaretskii @ 2022-10-05 23:40 ` Emanuel Berg 2022-10-06 22:04 ` Richard Stallman 2 siblings, 0 replies; 83+ messages in thread From: Emanuel Berg @ 2022-10-05 23:40 UTC (permalink / raw) To: emacs-devel Andrea Monaco wrote: > Can rmail display a summary by thread? That would be useful > to me, and I'm willing to work on it. Great, but you are aware of Emacs Gnus? -- underground experts united https://dataswamp.org/~incal ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: Summary by thread in rmail 2022-10-05 18:31 Summary by thread in rmail Andrea Monaco 2022-10-05 18:49 ` Eli Zaretskii 2022-10-05 23:40 ` Emanuel Berg @ 2022-10-06 22:04 ` Richard Stallman 2022-10-07 10:17 ` Andrea Monaco 2022-10-09 20:33 ` [PATCH] Allow applying filters to summary consecutively (was: Summary by thread in rmail) Andrea Monaco 2 siblings, 2 replies; 83+ messages in thread From: Richard Stallman @ 2022-10-06 22:04 UTC (permalink / raw) To: Andrea Monaco; +Cc: emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Can rmail display a summary by thread? That would be useful to me, and > I'm willing to work on it. I would appreciate that feature very much. Another related feature that would be nice is one to generated a summary by filtering the messages currently listed in the summary. For instance, suppose that C-u C-M-t reduced the current summary by excluding the messages whose subjects don't match the specified regexp. This would make it possible to check for a conjunction of conditions. And membership in a thread, if you're added that, could be one of them. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: Summary by thread in rmail 2022-10-06 22:04 ` Richard Stallman @ 2022-10-07 10:17 ` Andrea Monaco 2022-10-07 11:24 ` Emanuel Berg 2022-10-09 20:33 ` [PATCH] Allow applying filters to summary consecutively (was: Summary by thread in rmail) Andrea Monaco 1 sibling, 1 reply; 83+ messages in thread From: Andrea Monaco @ 2022-10-07 10:17 UTC (permalink / raw) To: rms; +Cc: emacs-devel As I've said, my current patch shows a summary of _all_ mail by thread, but it deduces threads based on subject alone. I can add detection of other fields such as In-reply-to and References, as many people seem to prefer it. > This would make it possible to check for a conjunction of > conditions. And membership in a thread, if you're added that, could > be one of them. Applying consecutive filters is a different thing, but it seems a natural improvement, so I'll take a look. Andrea Monaco ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: Summary by thread in rmail 2022-10-07 10:17 ` Andrea Monaco @ 2022-10-07 11:24 ` Emanuel Berg 0 siblings, 0 replies; 83+ messages in thread From: Emanuel Berg @ 2022-10-07 11:24 UTC (permalink / raw) To: emacs-devel Andrea Monaco wrote: > As I've said, my current patch shows a summary of _all_ mail > by thread, but it deduces threads based on subject alone. > I can add detection of other fields such as In-reply-to and > References, as many people seem to prefer it. Yes, because it is the actual thread :) -- underground experts united https://dataswamp.org/~incal ^ permalink raw reply [flat|nested] 83+ messages in thread
* [PATCH] Allow applying filters to summary consecutively (was: Summary by thread in rmail) 2022-10-06 22:04 ` Richard Stallman 2022-10-07 10:17 ` Andrea Monaco @ 2022-10-09 20:33 ` Andrea Monaco 2022-10-10 7:31 ` Eli Zaretskii 2022-10-10 22:03 ` [PATCH] " Richard Stallman 1 sibling, 2 replies; 83+ messages in thread From: Andrea Monaco @ 2022-10-09 20:33 UTC (permalink / raw) To: emacs-devel; +Cc: rms This patch adds optional argument keep-filtering to rmail-summary-by-* commands. When t, the filter works on the currently displayed summary. I also wrote a command rmail-summary-negate to invert the current selection of displayed messages. Andrea Monaco diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el index b959f45250..24cad60bda 100644 --- a/lisp/mail/rmailsum.el +++ b/lisp/mail/rmailsum.el @@ -50,6 +50,13 @@ rmail-summary-line-count-flag :type 'boolean :group 'rmail-summary) +(defvar rmail-summary-currently-displayed-msgs nil + "String made of 'y' and 'n'. At index i it tells wether +message i is shown on the summary or not. First character is +ignored. Used when applying rmail-summary-by-* commands +consecutively.") +(put 'rmail-summary-currently-displayed-msgs 'permanent-local t) + (defvar rmail-summary-font-lock-keywords '(("^ *[0-9]+D.*" . font-lock-string-face) ; Deleted. ("^ *[0-9]+-.*" . font-lock-type-face) ; Unread. @@ -267,6 +274,33 @@ rmail-summary-mode-map (defun rmail-update-summary (&rest _) (apply (car rmail-summary-redo) (cdr rmail-summary-redo))) +(defun rmail-summary-fill-displayed-messages () + "Fill the rmail-summary-currently-displayed-msgs string." + (with-current-buffer rmail-buffer + (with-current-buffer rmail-summary-buffer + (setq rmail-summary-currently-displayed-msgs + (make-string (1+ rmail-total-messages) ?n)) + (goto-char (point-min)) + (while (not (eobp)) + (aset rmail-summary-currently-displayed-msgs + (string-to-number (thing-at-point 'line)) + ?y) + (forward-line 1))))) + +(defun rmail-summary-negate () + "Invert the current set of displayed messages in the summary." + (interactive) + (rmail-summary-fill-displayed-messages) + (rmail-new-summary "Negate" + '(rmail-summary-by-regexp ".*" t) + (lambda (msg) + (if + (char-equal (aref rmail-summary-currently-displayed-msgs msg) + ?n) + (progn + (aset rmail-summary-currently-displayed-msgs msg ?y) t) + (progn + (aset rmail-summary-currently-displayed-msgs msg ?n) nil))))) ;;;###autoload (defun rmail-summary () "Display a summary of all messages, one line per message." @@ -274,7 +308,7 @@ rmail-summary (rmail-new-summary "All" '(rmail-summary) nil)) ;;;###autoload -(defun rmail-summary-by-labels (labels) +(defun rmail-summary-by-labels (labels &optional keep-filtering) "Display a summary of all messages with one or more LABELS. LABELS should be a string containing the desired labels, separated by commas." (interactive "sLabels to summarize by: ") @@ -282,25 +316,40 @@ rmail-summary-by-labels (setq labels (or rmail-last-multi-labels (error "No label specified")))) (setq rmail-last-multi-labels labels) + (if keep-filtering + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "labels " labels) - (list 'rmail-summary-by-labels labels) - 'rmail-message-labels-p + (list 'rmail-summary-by-labels labels keep-filtering) + (if keep-filtering + (lambda (msg l) + (and (char-equal (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-labels-p msg l))) + 'rmail-message-labels-p) (concat " \\(" (mail-comma-list-regexp labels) "\\)\\(,\\|\\'\\)"))) ;;;###autoload -(defun rmail-summary-by-recipients (recipients &optional primary-only) +(defun rmail-summary-by-recipients (recipients &optional primary-only keep-filtering) "Display a summary of all messages with the given RECIPIENTS. Normally checks the To, From and Cc fields of headers; but if PRIMARY-ONLY is non-nil (prefix arg given), only look in the To and From fields. RECIPIENTS is a regular expression." (interactive "sRecipients to summarize by: \nP") + (if keep-filtering + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "recipients " recipients) - (list 'rmail-summary-by-recipients recipients primary-only) - 'rmail-message-recipients-p recipients primary-only)) + (list 'rmail-summary-by-recipients recipients primary-only keep-filtering) + (if keep-filtering + (lambda (msg r) + (and (char-equal (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-recipients-p msg r))) + 'rmail-message-recipients-p) + recipients primary-only)) (defun rmail-message-recipients-p (msg recipients &optional primary-only) (rmail-apply-in-message msg 'rmail-message-recipients-p-1 @@ -318,7 +367,7 @@ rmail-message-recipients-p-1 ;; Also, the optional WHOLE-MESSAGE argument of r-s-by-topic would ;; seem more natural here. ;;;###autoload -(defun rmail-summary-by-regexp (regexp) +(defun rmail-summary-by-regexp (regexp &optional keep-filtering) "Display a summary of all messages according to regexp REGEXP. If the regular expression is found in the header of the message \(including in the date and other lines, as well as the subject line), @@ -328,9 +377,16 @@ rmail-summary-by-regexp (setq regexp (or rmail-last-regexp (error "No regexp specified")))) (setq rmail-last-regexp regexp) + (if keep-filtering + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "regexp " regexp) - (list 'rmail-summary-by-regexp regexp) - 'rmail-message-regexp-p + (list 'rmail-summary-by-regexp regexp keep-filtering) + (if keep-filtering + (lambda (msg r) + (and (char-equal (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-regexp-p msg r))) + 'rmail-message-regexp-p) regexp)) (defun rmail-message-regexp-p (msg regexp) @@ -363,7 +419,7 @@ rmail-message-regexp-p-1 (rmail--decode-and-apply 're-search-forward regexp nil t))) ;;;###autoload -(defun rmail-summary-by-topic (subject &optional whole-message) +(defun rmail-summary-by-topic (subject &optional whole-message keep-filtering) "Display a summary of all messages with the given SUBJECT. Normally checks just the Subject field of headers; but with prefix argument WHOLE-MESSAGE is non-nil, looks in the whole message. @@ -376,10 +432,18 @@ rmail-summary-by-topic (if subject ", default current subject" "") "): "))) (list (read-string prompt nil nil subject) current-prefix-arg))) + (if keep-filtering + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "about " subject) - (list 'rmail-summary-by-topic subject whole-message) - 'rmail-message-subject-p subject whole-message)) + (list 'rmail-summary-by-topic subject whole-message keep-filtering) + (if keep-filtering + (lambda (msg s wo) + (and (char-equal (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-subject-p msg s wo))) + 'rmail-message-subject-p) + subject whole-message)) (defun rmail-message-subject-p (msg subject &optional whole-message) (if whole-message @@ -389,7 +453,7 @@ rmail-message-subject-p (string-match subject (rmail-simplified-subject msg)))) ;;;###autoload -(defun rmail-summary-by-senders (senders) +(defun rmail-summary-by-senders (senders &optional keep-filtering) "Display a summary of all messages whose \"From\" field matches SENDERS. SENDERS is a regular expression. The default for SENDERS matches the sender of the current message." @@ -402,9 +466,18 @@ rmail-summary-by-senders (if sender ", default this message's sender" "") "): "))) (list (read-string prompt nil nil sender)))) + (if keep-filtering + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "senders " senders) - (list 'rmail-summary-by-senders senders) 'rmail-message-senders-p senders)) + (list 'rmail-summary-by-senders senders keep-filtering) + (if keep-filtering + (lambda (msg s) + (and (char-equal (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-senders-p msg s))) + 'rmail-message-senders-p) + senders)) (defun rmail-message-senders-p (msg senders) (string-match senders (or (rmail-get-header "From" msg) ""))) ^ permalink raw reply related [flat|nested] 83+ messages in thread
* Re: [PATCH] Allow applying filters to summary consecutively (was: Summary by thread in rmail) 2022-10-09 20:33 ` [PATCH] Allow applying filters to summary consecutively (was: Summary by thread in rmail) Andrea Monaco @ 2022-10-10 7:31 ` Eli Zaretskii 2022-10-10 8:38 ` Andrea Monaco 2022-10-10 22:03 ` [PATCH] " Richard Stallman 1 sibling, 1 reply; 83+ messages in thread From: Eli Zaretskii @ 2022-10-10 7:31 UTC (permalink / raw) To: Andrea Monaco; +Cc: emacs-devel, rms > From: Andrea Monaco <andrea.monaco@autistici.org> > Cc: rms@gnu.org > Date: Sun, 09 Oct 2022 22:33:01 +0200 > > This patch adds optional argument keep-filtering to rmail-summary-by-* > commands. When t, the filter works on the currently displayed summary. Thanks. But the rmail-summary-* are commands, not just functions. How can an Rmail user invoke these commands to work only on the messages in the currently-displayed summary? Without some user ability to take advantage of these new options, the feature is less useful, IMO. > +(defun rmail-summary-negate () > + "Invert the current set of displayed messages in the summary." The doc string should explain what is meant by "negation" here. > + (interactive) > + (rmail-summary-fill-displayed-messages) > + (rmail-new-summary "Negate" I think "Negate" is not the best description of the summary being produced. How about "NOT" instead? It should produce mode-line display such as RMAIL Summary: NOT regexp .... > + (lambda (msg) > + (if > + (char-equal (aref rmail-summary-currently-displayed-msgs msg) > + ?n) Shouldn't a simple '=' be enough here, instead of char-equal (here and elsewhere in the patch)? These y/n markers are completely internal, AFAIU, so all the additional features of char-equal, such as case-non-sensitivity, should not be relevant. > -(defun rmail-summary-by-labels (labels) > +(defun rmail-summary-by-labels (labels &optional keep-filtering) > "Display a summary of all messages with one or more LABELS. > LABELS should be a string containing the desired labels, separated by commas." Please add the description of the new optional argument to the doc strings of all the functions you are modifying. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH] Allow applying filters to summary consecutively (was: Summary by thread in rmail) 2022-10-10 7:31 ` Eli Zaretskii @ 2022-10-10 8:38 ` Andrea Monaco 2022-10-10 8:57 ` Eli Zaretskii 0 siblings, 1 reply; 83+ messages in thread From: Andrea Monaco @ 2022-10-10 8:38 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel, rms > Without some user ability to take advantage of these new options, > the feature is less useful, IMO. I agree. One possible solution is that for every rmail-summary-by-* function, let's say rmail-summary-by-topic, we add another simple command called rmail-summary-further-by-topic that looks something like this: (defun rmail-summary-further-by-topic (subject &optional whole-message) (interactive) (rmail-summary-by-topic subject whole-message t)) I agree on the other objections too. Andrea Monaco ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH] Allow applying filters to summary consecutively (was: Summary by thread in rmail) 2022-10-10 8:38 ` Andrea Monaco @ 2022-10-10 8:57 ` Eli Zaretskii 2022-10-11 7:16 ` [PATCH v2] " Andrea Monaco 0 siblings, 1 reply; 83+ messages in thread From: Eli Zaretskii @ 2022-10-10 8:57 UTC (permalink / raw) To: Andrea Monaco; +Cc: emacs-devel, rms > From: Andrea Monaco <andrea.monaco@autistici.org> > Cc: emacs-devel@gnu.org, rms@gnu.org > Date: Mon, 10 Oct 2022 10:38:19 +0200 > > > > Without some user ability to take advantage of these new options, > > the feature is less useful, IMO. > > I agree. One possible solution is that for every rmail-summary-by-* > function, let's say rmail-summary-by-topic, we add another simple > command called rmail-summary-further-by-topic that looks something like > this: > > (defun rmail-summary-further-by-topic (subject &optional whole-message) > (interactive) > (rmail-summary-by-topic subject whole-message t)) I think it could be better to use the prefix argument. AFAICT, only one of the Rmail's summary commands already uses the prefix argument, the rest don't. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v2] Allow applying filters to summary consecutively (was: Summary by thread in rmail) 2022-10-10 8:57 ` Eli Zaretskii @ 2022-10-11 7:16 ` Andrea Monaco 2022-10-11 8:13 ` [PATCH v2] Allow applying filters to summary consecutively Robert Pluim 2022-10-27 13:58 ` [PATCH v2] Allow applying filters to summary consecutively (was: Summary by thread in rmail) Eli Zaretskii 0 siblings, 2 replies; 83+ messages in thread From: Andrea Monaco @ 2022-10-11 7:16 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel, rms rmail-summary-by-recipients and rmail-summary-by-topic already use the prefix argument for every non-nil value, so I don't know how to proceed. I applied all other changes. Andrea Monaco diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el index b959f45250..5e51a8cd20 100644 --- a/lisp/mail/rmailsum.el +++ b/lisp/mail/rmailsum.el @@ -50,6 +50,13 @@ rmail-summary-line-count-flag :type 'boolean :group 'rmail-summary) +(defvar rmail-summary-currently-displayed-msgs nil + "String made of 'y' and 'n'. At index i it tells wether +message i is shown on the summary or not. First character is +ignored. Used when applying rmail-summary-by-* commands +consecutively.") +(put 'rmail-summary-currently-displayed-msgs 'permanent-local t) + (defvar rmail-summary-font-lock-keywords '(("^ *[0-9]+D.*" . font-lock-string-face) ; Deleted. ("^ *[0-9]+-.*" . font-lock-type-face) ; Unread. @@ -267,6 +274,35 @@ rmail-summary-mode-map (defun rmail-update-summary (&rest _) (apply (car rmail-summary-redo) (cdr rmail-summary-redo))) +(defun rmail-summary-fill-displayed-messages () + "Fill the rmail-summary-currently-displayed-msgs string." + (with-current-buffer rmail-buffer + (with-current-buffer rmail-summary-buffer + (setq rmail-summary-currently-displayed-msgs + (make-string (1+ rmail-total-messages) ?n)) + (goto-char (point-min)) + (while (not (eobp)) + (aset rmail-summary-currently-displayed-msgs + (string-to-number (thing-at-point 'line)) + ?y) + (forward-line 1))))) + +(defun rmail-summary-negate () + "Negate the current summary. That is, show the messages that +are not displayed, and vice versa." + (interactive) + (rmail-summary-fill-displayed-messages) + (rmail-new-summary "Negate" + '(rmail-summary-by-regexp ".*" t) + (lambda (msg) + (if + (= (aref rmail-summary-currently-displayed-msgs msg) + ?n) + (progn + (aset rmail-summary-currently-displayed-msgs msg ?y) t) + (progn + (aset rmail-summary-currently-displayed-msgs msg ?n) nil))))) + ;;;###autoload (defun rmail-summary () "Display a summary of all messages, one line per message." @@ -274,33 +310,52 @@ rmail-summary (rmail-new-summary "All" '(rmail-summary) nil)) ;;;###autoload -(defun rmail-summary-by-labels (labels) +(defun rmail-summary-by-labels (labels &optional keep-filtering) "Display a summary of all messages with one or more LABELS. -LABELS should be a string containing the desired labels, separated by commas." - (interactive "sLabels to summarize by: ") +LABELS should be a string containing the desired labels, separated by commas. + If KEEP-FILTERING is non-nil or prefix argument is given, operate on the +current summary instead of all mail." + (interactive "sLabels to summarize by: \nP") (if (string= labels "") (setq labels (or rmail-last-multi-labels (error "No label specified")))) (setq rmail-last-multi-labels labels) + (if keep-filtering + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "labels " labels) - (list 'rmail-summary-by-labels labels) - 'rmail-message-labels-p + (list 'rmail-summary-by-labels labels keep-filtering) + (if keep-filtering + (lambda (msg l) + (and (= (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-labels-p msg l))) + 'rmail-message-labels-p) (concat " \\(" (mail-comma-list-regexp labels) "\\)\\(,\\|\\'\\)"))) ;;;###autoload -(defun rmail-summary-by-recipients (recipients &optional primary-only) +(defun rmail-summary-by-recipients (recipients &optional primary-only keep-filtering) "Display a summary of all messages with the given RECIPIENTS. Normally checks the To, From and Cc fields of headers; but if PRIMARY-ONLY is non-nil (prefix arg given), only look in the To and From fields. -RECIPIENTS is a regular expression." +RECIPIENTS is a regular expression. + If KEEP-FILTERING is non-nil, operate on the current summary +instead of all mail." (interactive "sRecipients to summarize by: \nP") + (if keep-filtering + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "recipients " recipients) - (list 'rmail-summary-by-recipients recipients primary-only) - 'rmail-message-recipients-p recipients primary-only)) + (list 'rmail-summary-by-recipients recipients primary-only keep-filtering) + (if keep-filtering + (lambda (msg r) + (and (= (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-recipients-p msg r))) + 'rmail-message-recipients-p) + recipients primary-only)) (defun rmail-message-recipients-p (msg recipients &optional primary-only) (rmail-apply-in-message msg 'rmail-message-recipients-p-1 @@ -318,19 +373,28 @@ rmail-message-recipients-p-1 ;; Also, the optional WHOLE-MESSAGE argument of r-s-by-topic would ;; seem more natural here. ;;;###autoload -(defun rmail-summary-by-regexp (regexp) +(defun rmail-summary-by-regexp (regexp &optional keep-filtering) "Display a summary of all messages according to regexp REGEXP. If the regular expression is found in the header of the message \(including in the date and other lines, as well as the subject line), -Emacs will list the message in the summary." - (interactive "sRegexp to summarize by: ") +Emacs will list the message in the summary. + If KEEP-FILTERING is non-nil or prefix argument is given, operate +on the current summary instead of all mail." + (interactive "sRegexp to summarize by: \nP") (if (string= regexp "") (setq regexp (or rmail-last-regexp (error "No regexp specified")))) (setq rmail-last-regexp regexp) + (if keep-filtering + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "regexp " regexp) - (list 'rmail-summary-by-regexp regexp) - 'rmail-message-regexp-p + (list 'rmail-summary-by-regexp regexp keep-filtering) + (if keep-filtering + (lambda (msg r) + (and (= (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-regexp-p msg r))) + 'rmail-message-regexp-p) regexp)) (defun rmail-message-regexp-p (msg regexp) @@ -363,11 +427,13 @@ rmail-message-regexp-p-1 (rmail--decode-and-apply 're-search-forward regexp nil t))) ;;;###autoload -(defun rmail-summary-by-topic (subject &optional whole-message) +(defun rmail-summary-by-topic (subject &optional whole-message keep-filtering) "Display a summary of all messages with the given SUBJECT. -Normally checks just the Subject field of headers; but with prefix +Normally checks just the Subject field of headers; but when prefix argument WHOLE-MESSAGE is non-nil, looks in the whole message. -SUBJECT is a regular expression." +SUBJECT is a regular expression. + If KEEP-FILTERING is non-nil, operate on the current summary +instead of all mail." (interactive ;; We quote the default subject, because if it contains regexp ;; special characters (eg "?"), it can fail to match itself. (Bug#2333) @@ -376,10 +442,18 @@ rmail-summary-by-topic (if subject ", default current subject" "") "): "))) (list (read-string prompt nil nil subject) current-prefix-arg))) + (if keep-filtering + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "about " subject) - (list 'rmail-summary-by-topic subject whole-message) - 'rmail-message-subject-p subject whole-message)) + (list 'rmail-summary-by-topic subject whole-message keep-filtering) + (if keep-filtering + (lambda (msg s wo) + (and (= (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-subject-p msg s wo))) + 'rmail-message-subject-p) + subject whole-message)) (defun rmail-message-subject-p (msg subject &optional whole-message) (if whole-message @@ -389,10 +463,12 @@ rmail-message-subject-p (string-match subject (rmail-simplified-subject msg)))) ;;;###autoload -(defun rmail-summary-by-senders (senders) +(defun rmail-summary-by-senders (senders &optional keep-filtering) "Display a summary of all messages whose \"From\" field matches SENDERS. SENDERS is a regular expression. The default for SENDERS matches the -sender of the current message." +sender of the current message. + If KEEP-FILTERING is non-nil or prefix argument is given, operate on +the current summary instead of all mail." (interactive (let* ((def (rmail-get-header "From")) ;; We quote the default argument, because if it contains regexp @@ -401,10 +477,20 @@ rmail-summary-by-senders (prompt (concat "Senders to summarize by (regexp" (if sender ", default this message's sender" "") "): "))) - (list (read-string prompt nil nil sender)))) + (list (read-string prompt nil nil sender) + current-prefix-arg))) + (if keep-filtering + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "senders " senders) - (list 'rmail-summary-by-senders senders) 'rmail-message-senders-p senders)) + (list 'rmail-summary-by-senders senders keep-filtering) + (if keep-filtering + (lambda (msg s) + (and (= (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-senders-p msg s))) + 'rmail-message-senders-p) + senders)) (defun rmail-message-senders-p (msg senders) (string-match senders (or (rmail-get-header "From" msg) ""))) ^ permalink raw reply related [flat|nested] 83+ messages in thread
* Re: [PATCH v2] Allow applying filters to summary consecutively 2022-10-11 7:16 ` [PATCH v2] " Andrea Monaco @ 2022-10-11 8:13 ` Robert Pluim 2022-10-12 9:35 ` Andrea Monaco 2022-10-27 13:58 ` [PATCH v2] Allow applying filters to summary consecutively (was: Summary by thread in rmail) Eli Zaretskii 1 sibling, 1 reply; 83+ messages in thread From: Robert Pluim @ 2022-10-11 8:13 UTC (permalink / raw) To: Andrea Monaco; +Cc: Eli Zaretskii, emacs-devel, rms >>>>> On Tue, 11 Oct 2022 09:16:52 +0200, Andrea Monaco <andrea.monaco@autistici.org> said: Andrea> rmail-summary-by-recipients and rmail-summary-by-topic already use the Andrea> prefix argument for every non-nil value, so I don't know how to proceed. Andrea> I applied all other changes. The way this normally works in eg `list-packages' or gnus summary buffers is that filtering automatically stacks: filter by x, filter by y applies to previous results, etc, and then thereʼs a command to pop the filtering stack. Regards Robert -- ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v2] Allow applying filters to summary consecutively 2022-10-11 8:13 ` [PATCH v2] Allow applying filters to summary consecutively Robert Pluim @ 2022-10-12 9:35 ` Andrea Monaco 2022-10-12 11:03 ` Robert Pluim ` (2 more replies) 0 siblings, 3 replies; 83+ messages in thread From: Andrea Monaco @ 2022-10-12 9:35 UTC (permalink / raw) To: Robert Pluim; +Cc: eliz, emacs-devel, rms > The way this normally works in eg `list-packages' or gnus summary > buffers is that filtering automatically stacks: filter by x, filter > by y applies to previous results, etc, and then thereʼs a command to > pop the filtering stack. That seems very reasonable to me, but it would change current default behavior, which is that every filter starts from scratch. I don't know if that could be a problem for some people. Andrea Monaco ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v2] Allow applying filters to summary consecutively 2022-10-12 9:35 ` Andrea Monaco @ 2022-10-12 11:03 ` Robert Pluim 2022-10-12 12:56 ` Eli Zaretskii 2022-10-12 22:02 ` Richard Stallman 2 siblings, 0 replies; 83+ messages in thread From: Robert Pluim @ 2022-10-12 11:03 UTC (permalink / raw) To: Andrea Monaco; +Cc: eliz, emacs-devel, rms >>>>> On Wed, 12 Oct 2022 11:35:24 +0200, Andrea Monaco <andrea.monaco@autistici.org> said: >> The way this normally works in eg `list-packages' or gnus summary >> buffers is that filtering automatically stacks: filter by x, filter >> by y applies to previous results, etc, and then thereʼs a command to >> pop the filtering stack. Andrea> That seems very reasonable to me, but it would change current default Andrea> behavior, which is that every filter starts from scratch. I don't know Andrea> if that could be a problem for some people. This is what user options were invented for :-) Robert -- ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v2] Allow applying filters to summary consecutively 2022-10-12 9:35 ` Andrea Monaco 2022-10-12 11:03 ` Robert Pluim @ 2022-10-12 12:56 ` Eli Zaretskii 2022-10-12 18:13 ` Andrea Monaco 2022-10-12 22:02 ` Richard Stallman 2 siblings, 1 reply; 83+ messages in thread From: Eli Zaretskii @ 2022-10-12 12:56 UTC (permalink / raw) To: Andrea Monaco; +Cc: rpluim, emacs-devel, rms > From: Andrea Monaco <andrea.monaco@autistici.org> > Cc: eliz@gnu.org, emacs-devel@gnu.org, rms@gnu.org > Date: Wed, 12 Oct 2022 11:35:24 +0200 > > > > The way this normally works in eg `list-packages' or gnus summary > > buffers is that filtering automatically stacks: filter by x, filter > > by y applies to previous results, etc, and then thereʼs a command to > > pop the filtering stack. > > > That seems very reasonable to me, but it would change current default > behavior, which is that every filter starts from scratch. I don't know > if that could be a problem for some people. I'd rather not make such drastic changes in the behavior of Rmail. Most people who use it are likely to be on the conservative side. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v2] Allow applying filters to summary consecutively 2022-10-12 12:56 ` Eli Zaretskii @ 2022-10-12 18:13 ` Andrea Monaco 2022-10-12 18:22 ` Eli Zaretskii 0 siblings, 1 reply; 83+ messages in thread From: Andrea Monaco @ 2022-10-12 18:13 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rpluim, emacs-devel, rms > I'd rather not make such drastic changes in the behavior of Rmail. > Most people who use it are likely to be on the conservative side. We could make a new global variable called something like rmail-summary-apply-filters-consecutively. When it is non-nil, the new behavior applies. That shouldn't break anything. Andrea Monaco ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v2] Allow applying filters to summary consecutively 2022-10-12 18:13 ` Andrea Monaco @ 2022-10-12 18:22 ` Eli Zaretskii 0 siblings, 0 replies; 83+ messages in thread From: Eli Zaretskii @ 2022-10-12 18:22 UTC (permalink / raw) To: Andrea Monaco; +Cc: rpluim, emacs-devel, rms > From: Andrea Monaco <andrea.monaco@autistici.org> > Cc: rpluim@gmail.com, emacs-devel@gnu.org, rms@gnu.org > Date: Wed, 12 Oct 2022 20:13:22 +0200 > > > > I'd rather not make such drastic changes in the behavior of Rmail. > > Most people who use it are likely to be on the conservative side. > > We could make a new global variable called something like > rmail-summary-apply-filters-consecutively. When it is non-nil, the new > behavior applies. That shouldn't break anything. Yes, but since no one has yet requested such a behavior, why introduce yet another knob? ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v2] Allow applying filters to summary consecutively 2022-10-12 9:35 ` Andrea Monaco 2022-10-12 11:03 ` Robert Pluim 2022-10-12 12:56 ` Eli Zaretskii @ 2022-10-12 22:02 ` Richard Stallman 2022-10-19 14:23 ` [PATCH v3] " Andrea Monaco 2 siblings, 1 reply; 83+ messages in thread From: Richard Stallman @ 2022-10-12 22:02 UTC (permalink / raw) To: Andrea Monaco; +Cc: rpluim, eliz, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > That seems very reasonable to me, but it would change current default > behavior, which is that every filter starts from scratch. Please don't change that default behavior! It is ok to have user options to specify some other behavior. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-10-12 22:02 ` Richard Stallman @ 2022-10-19 14:23 ` Andrea Monaco 2022-10-19 14:55 ` Robert Pluim ` (2 more replies) 0 siblings, 3 replies; 83+ messages in thread From: Andrea Monaco @ 2022-10-19 14:23 UTC (permalink / raw) To: rms; +Cc: rpluim, eliz, emacs-devel I introduced a configuration item called rmail-summary-apply-filters-consecutively. When set to non-nil, the filters stack. I also removed the KEEP-FILTERING argument that I previously added, because it is no longer needed now that there's a global switch. Andrea Monaco diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el index b959f45250..7f000ea014 100644 --- a/lisp/mail/rmailsum.el +++ b/lisp/mail/rmailsum.el @@ -50,6 +50,20 @@ rmail-summary-line-count-flag :type 'boolean :group 'rmail-summary) +(defcustom rmail-summary-apply-filters-consecutively nil + "Non-nil means that commands rmail-summary-by-* works on the +current summary and so can be stacked one after the other." + :type 'boolean + :group 'rmail-summary) + +(defvar rmail-summary-currently-displayed-msgs nil + "String made of 'y' and 'n'. At index i it tells wether +message i is shown on the summary or not. First character is +ignored. Used when applying rmail-summary-by-* commands +consecutively. Filled by +rmail-summary-fill-displayed-messages.") +(put 'rmail-summary-currently-displayed-msgs 'permanent-local t) + (defvar rmail-summary-font-lock-keywords '(("^ *[0-9]+D.*" . font-lock-string-face) ; Deleted. ("^ *[0-9]+-.*" . font-lock-type-face) ; Unread. @@ -267,6 +281,35 @@ rmail-summary-mode-map (defun rmail-update-summary (&rest _) (apply (car rmail-summary-redo) (cdr rmail-summary-redo))) +(defun rmail-summary-fill-displayed-messages () + "Fill the rmail-summary-currently-displayed-msgs string." + (with-current-buffer rmail-buffer + (with-current-buffer rmail-summary-buffer + (setq rmail-summary-currently-displayed-msgs + (make-string (1+ rmail-total-messages) ?n)) + (goto-char (point-min)) + (while (not (eobp)) + (aset rmail-summary-currently-displayed-msgs + (string-to-number (thing-at-point 'line)) + ?y) + (forward-line 1))))) + +(defun rmail-summary-negate () + "Negate the current summary. That is, show the messages that +are not displayed, and vice versa." + (interactive) + (rmail-summary-fill-displayed-messages) + (rmail-new-summary "Negate" + '(rmail-summary-by-regexp ".*") + (lambda (msg) + (if + (= (aref rmail-summary-currently-displayed-msgs msg) + ?n) + (progn + (aset rmail-summary-currently-displayed-msgs msg ?y) t) + (progn + (aset rmail-summary-currently-displayed-msgs msg ?n) nil))))) + ;;;###autoload (defun rmail-summary () "Display a summary of all messages, one line per message." @@ -282,9 +325,16 @@ rmail-summary-by-labels (setq labels (or rmail-last-multi-labels (error "No label specified")))) (setq rmail-last-multi-labels labels) + (if rmail-summary-apply-filters-consecutively + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "labels " labels) (list 'rmail-summary-by-labels labels) - 'rmail-message-labels-p + (if rmail-summary-apply-filters-consecutively + (lambda (msg l) + (and (= (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-labels-p msg l))) + 'rmail-message-labels-p) (concat " \\(" (mail-comma-list-regexp labels) "\\)\\(,\\|\\'\\)"))) @@ -297,10 +347,18 @@ rmail-summary-by-recipients only look in the To and From fields. RECIPIENTS is a regular expression." (interactive "sRecipients to summarize by: \nP") + (if rmail-summary-apply-filters-consecutively + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "recipients " recipients) (list 'rmail-summary-by-recipients recipients primary-only) - 'rmail-message-recipients-p recipients primary-only)) + (if rmail-summary-apply-filters-consecutively + (lambda (msg r &optional po) + (and (= (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-recipients-p msg r po))) + 'rmail-message-recipients-p) + recipients primary-only)) (defun rmail-message-recipients-p (msg recipients &optional primary-only) (rmail-apply-in-message msg 'rmail-message-recipients-p-1 @@ -328,9 +386,16 @@ rmail-summary-by-regexp (setq regexp (or rmail-last-regexp (error "No regexp specified")))) (setq rmail-last-regexp regexp) + (if rmail-summary-apply-filters-consecutively + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "regexp " regexp) (list 'rmail-summary-by-regexp regexp) - 'rmail-message-regexp-p + (if rmail-summary-apply-filters-consecutively + (lambda (msg r) + (and (= (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-regexp-p msg r))) + 'rmail-message-regexp-p) regexp)) (defun rmail-message-regexp-p (msg regexp) @@ -365,7 +430,7 @@ rmail-message-regexp-p-1 ;;;###autoload (defun rmail-summary-by-topic (subject &optional whole-message) "Display a summary of all messages with the given SUBJECT. -Normally checks just the Subject field of headers; but with prefix +Normally checks just the Subject field of headers; but when prefix argument WHOLE-MESSAGE is non-nil, looks in the whole message. SUBJECT is a regular expression." (interactive @@ -376,10 +441,18 @@ rmail-summary-by-topic (if subject ", default current subject" "") "): "))) (list (read-string prompt nil nil subject) current-prefix-arg))) + (if rmail-summary-apply-filters-consecutively + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "about " subject) (list 'rmail-summary-by-topic subject whole-message) - 'rmail-message-subject-p subject whole-message)) + (if rmail-summary-apply-filters-consecutively + (lambda (msg s &optional wm) + (and (= (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-subject-p msg s wm))) + 'rmail-message-subject-p) + subject whole-message)) (defun rmail-message-subject-p (msg subject &optional whole-message) (if whole-message @@ -402,9 +475,18 @@ rmail-summary-by-senders (if sender ", default this message's sender" "") "): "))) (list (read-string prompt nil nil sender)))) + (if rmail-summary-apply-filters-consecutively + (rmail-summary-fill-displayed-messages)) (rmail-new-summary (concat "senders " senders) - (list 'rmail-summary-by-senders senders) 'rmail-message-senders-p senders)) + (list 'rmail-summary-by-senders senders) + (if rmail-summary-apply-filters-consecutively + (lambda (msg s) + (and (= (aref rmail-summary-currently-displayed-msgs msg) + ?y) + (rmail-message-senders-p msg s))) + 'rmail-message-senders-p) + senders)) (defun rmail-message-senders-p (msg senders) (string-match senders (or (rmail-get-header "From" msg) ""))) ^ permalink raw reply related [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-10-19 14:23 ` [PATCH v3] " Andrea Monaco @ 2022-10-19 14:55 ` Robert Pluim 2022-10-20 15:45 ` Andrea Monaco 2022-10-21 19:38 ` Richard Stallman 2022-10-27 14:27 ` Eli Zaretskii 2 siblings, 1 reply; 83+ messages in thread From: Robert Pluim @ 2022-10-19 14:55 UTC (permalink / raw) To: Andrea Monaco; +Cc: rms, eliz, emacs-devel Hi Andrea, some comments below >>>>> On Wed, 19 Oct 2022 16:23:13 +0200, Andrea Monaco <andrea.monaco@autistici.org> said: Andrea> +(defcustom rmail-summary-apply-filters-consecutively nil Andrea> + "Non-nil means that commands rmail-summary-by-* works Andrea> on the Iʼd call it `rmail-summary-stack-filters' and say "Whether rmail-summary-by-* commands stack on each other." Andrea> +current summary and so can be stacked one after the other." Andrea> + :type 'boolean Andrea> + :group 'rmail-summary) This needs a :version "29.1" Andrea> +(defvar rmail-summary-currently-displayed-msgs nil Andrea> + "String made of 'y' and 'n'. At index i it tells Andrea> wether "whether" Andrea> +message i is shown on the summary or not. First character is Andrea> +ignored. Used when applying rmail-summary-by-* commands Andrea> +consecutively. Filled by Andrea> +rmail-summary-fill-displayed-messages.") Andrea> +(put 'rmail-summary-currently-displayed-msgs 'permanent-local t) Andrea> + Itʼs a string that you treat as a vector, so why not just make it a vector? Also 'fill' in Emacs normally means wrapping paragraphs of text, so perhaps `rmail-summary-populate-displayed-messages' or similar is better. Andrea> (defvar rmail-summary-font-lock-keywords Andrea> '(("^ *[0-9]+D.*" . font-lock-string-face) ; Deleted. Andrea> ("^ *[0-9]+-.*" . font-lock-type-face) ; Unread. Andrea> @@ -267,6 +281,35 @@ rmail-summary-mode-map Andrea> (defun rmail-update-summary (&rest _) Andrea> (apply (car rmail-summary-redo) (cdr rmail-summary-redo))) Andrea> +(defun rmail-summary-fill-displayed-messages () Andrea> + "Fill the rmail-summary-currently-displayed-msgs string." Andrea> + (with-current-buffer rmail-buffer Andrea> + (with-current-buffer rmail-summary-buffer Andrea> + (setq rmail-summary-currently-displayed-msgs Andrea> + (make-string (1+ rmail-total-messages) ?n)) Andrea> + (goto-char (point-min)) Andrea> + (while (not (eobp)) Andrea> + (aset rmail-summary-currently-displayed-msgs Andrea> + (string-to-number (thing-at-point 'line)) Andrea> + ?y) Andrea> + (forward-line 1))))) I donʼt remember the details of rmailʼs summary line format, but I think youʼd be better served with (thing-at-point 'number) (that also avoids the `string-to-number') Andrea> + Andrea> +(defun rmail-summary-negate () Andrea> + "Negate the current summary. That is, show the messages that Andrea> +are not displayed, and vice versa." The first line of the docstring should be a single complete sentence on a single line. Andrea> + (interactive) Andrea> + (rmail-summary-fill-displayed-messages) Andrea> + (rmail-new-summary "Negate" Andrea> + '(rmail-summary-by-regexp ".*") Andrea> + (lambda (msg) Andrea> + (if Andrea> + (= (aref rmail-summary-currently-displayed-msgs msg) Andrea> + ?n) Andrea> + (progn Andrea> + (aset rmail-summary-currently-displayed-msgs msg ?y) t) Andrea> + (progn Andrea> + (aset rmail-summary-currently-displayed-msgs msg ?n) nil))))) Andrea> + If you switch `rmail-summary-currently-displayed-msgs' to a vector, you can store `nil' and `t' there directly and avoid the prognʼs (aset returns the new value) Andrea> ;;;###autoload Andrea> (defun rmail-summary () Andrea> "Display a summary of all messages, one line per message." Andrea> @@ -282,9 +325,16 @@ rmail-summary-by-labels Andrea> (setq labels (or rmail-last-multi-labels Andrea> (error "No label specified")))) Andrea> (setq rmail-last-multi-labels labels) Andrea> + (if rmail-summary-apply-filters-consecutively Andrea> + (rmail-summary-fill-displayed-messages)) Andrea> (rmail-new-summary (concat "labels " labels) Andrea> (list 'rmail-summary-by-labels labels) Andrea> - 'rmail-message-labels-p Andrea> + (if rmail-summary-apply-filters-consecutively Andrea> + (lambda (msg l) Andrea> + (and (= (aref rmail-summary-currently-displayed-msgs msg) Andrea> + ?y) Andrea> + (rmail-message-labels-p msg l))) Andrea> + 'rmail-message-labels-p) Andrea> (concat " \\(" Andrea> (mail-comma-list-regexp labels) Andrea> "\\)\\(,\\|\\'\\)"))) I think you have this same lambda about 4 times in the code, perhaps `defun' it (using "rmail-summary--" as a prefix to indicate that itʼs intended for internal usage) Robert -- ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-10-19 14:55 ` Robert Pluim @ 2022-10-20 15:45 ` Andrea Monaco 2022-10-20 16:02 ` Robert Pluim 0 siblings, 1 reply; 83+ messages in thread From: Andrea Monaco @ 2022-10-20 15:45 UTC (permalink / raw) To: Robert Pluim; +Cc: rms, eliz, emacs-devel > Iʼd call it `rmail-summary-stack-filters' and say The metaphor of a stack is not perfect, as we don't have any "pop", that is there's no command to cancel the last filter. > I donʼt remember the details of rmailʼs summary line format, but I > think youʼd be better served with (thing-at-point 'number) There is some padding with whitespace at the beginning of each line, so you'd still need a jump command. > I think you have this same lambda about 4 times in the code, perhaps > `defun' it (using "rmail-summary--" as a prefix to indicate that > itʼs intended for internal usage) The five lambdas I added (one for each rmail-summary-by-* command) are similar but not identical. Maybe I could write a general function, but I find it too much of a hassle for a little line saving. I agree on the other objections. Andrea Monaco ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-10-20 15:45 ` Andrea Monaco @ 2022-10-20 16:02 ` Robert Pluim 2022-10-20 19:00 ` Andrea Monaco 0 siblings, 1 reply; 83+ messages in thread From: Robert Pluim @ 2022-10-20 16:02 UTC (permalink / raw) To: Andrea Monaco; +Cc: rms, eliz, emacs-devel >>>>> On Thu, 20 Oct 2022 17:45:56 +0200, Andrea Monaco <andrea.monaco@autistici.org> said: >> Iʼd call it `rmail-summary-stack-filters' and say Andrea> The metaphor of a stack is not perfect, as we don't have any "pop", that Andrea> is there's no command to cancel the last filter. Ah. How are people expected to get back to showing all messages? >> I donʼt remember the details of rmailʼs summary line format, but I >> think youʼd be better served with (thing-at-point 'number) Andrea> There is some padding with whitespace at the beginning of each line, so Andrea> you'd still need a jump command. Well, you could search forward from bol for a digit easily enough. >> I think you have this same lambda about 4 times in the code, perhaps >> `defun' it (using "rmail-summary--" as a prefix to indicate that >> itʼs intended for internal usage) Andrea> The five lambdas I added (one for each rmail-summary-by-* command) are Andrea> similar but not identical. Maybe I could write a general function, but Andrea> I find it too much of a hassle for a little line saving. OK Andrea> I agree on the other objections. Suggestions, not objections. Nothing Iʼve said stops the changes from going in. Robert -- ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-10-20 16:02 ` Robert Pluim @ 2022-10-20 19:00 ` Andrea Monaco 2022-10-21 19:42 ` Richard Stallman 0 siblings, 1 reply; 83+ messages in thread From: Andrea Monaco @ 2022-10-20 19:00 UTC (permalink / raw) To: Robert Pluim; +Cc: rms, eliz, emacs-devel > Ah. How are people expected to get back to showing all messages? With rmail-summary, bound to h by default. Adding the ability to undo the last filter only is probably easy, but it's not in my patch. Andrea Monaco ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-10-20 19:00 ` Andrea Monaco @ 2022-10-21 19:42 ` Richard Stallman 0 siblings, 0 replies; 83+ messages in thread From: Richard Stallman @ 2022-10-21 19:42 UTC (permalink / raw) To: Andrea Monaco; +Cc: rpluim, eliz, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > Ah. How are people expected to get back to showing all messages? > With rmail-summary, bound to h by default. That wouldk be very inconvenient for me. I never use the full summary because it is slow. My RMAIL file has over 3000 messages. I only make filtered summaries. What happens if you make a filtered summary and then kill it with q, then make a new filtered summary? Does that apply the one filter specified for the new summary? Or does it remember the filters of the summary that you killed? The former would be convenient enough. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-10-19 14:23 ` [PATCH v3] " Andrea Monaco 2022-10-19 14:55 ` Robert Pluim @ 2022-10-21 19:38 ` Richard Stallman 2022-10-27 14:27 ` Eli Zaretskii 2 siblings, 0 replies; 83+ messages in thread From: Richard Stallman @ 2022-10-21 19:38 UTC (permalink / raw) To: Andrea Monaco; +Cc: rpluim, eliz, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I introduced a configuration item called > rmail-summary-apply-filters-consecutively. When set to non-nil, the > filters stack. Saying that they "stack" seems to imply you can push an additional filter, and pop it off later. Is that the case? It could be a useful feature. But "stack" does NOT imply that the second filter refines the first. I think the word "intersect" is needed to explain this meaning. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-10-19 14:23 ` [PATCH v3] " Andrea Monaco 2022-10-19 14:55 ` Robert Pluim 2022-10-21 19:38 ` Richard Stallman @ 2022-10-27 14:27 ` Eli Zaretskii 2022-10-27 15:22 ` Andrea Monaco 2022-10-28 13:26 ` Andrea Monaco 2 siblings, 2 replies; 83+ messages in thread From: Eli Zaretskii @ 2022-10-27 14:27 UTC (permalink / raw) To: Andrea Monaco; +Cc: rms, rpluim, emacs-devel > From: Andrea Monaco <andrea.monaco@autistici.org> > Cc: rpluim@gmail.com, eliz@gnu.org, emacs-devel@gnu.org > Date: Wed, 19 Oct 2022 16:23:13 +0200 > > > I introduced a configuration item called > rmail-summary-apply-filters-consecutively. When set to non-nil, the > filters stack. I also removed the KEEP-FILTERING argument that I > previously added, because it is no longer needed now that there's a > global switch. Thanks, installed. In the future, please don't change the Subject of the messages, not even to indicate the version of the patch: it makes looking for the related messages harder. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-10-27 14:27 ` Eli Zaretskii @ 2022-10-27 15:22 ` Andrea Monaco 2022-10-28 13:26 ` Andrea Monaco 1 sibling, 0 replies; 83+ messages in thread From: Andrea Monaco @ 2022-10-27 15:22 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, rpluim, emacs-devel > Thanks, installed. Thanks, but that patch has a bug: it breaks if the user doesn't have a summary already opened. I'm working on a little fix. Andrea Monaco ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-10-27 14:27 ` Eli Zaretskii 2022-10-27 15:22 ` Andrea Monaco @ 2022-10-28 13:26 ` Andrea Monaco 2022-11-06 7:34 ` Eli Zaretskii 1 sibling, 1 reply; 83+ messages in thread From: Andrea Monaco @ 2022-10-28 13:26 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, rpluim, emacs-devel This version should be final. I change the name of the new configuration item. It will also work as expected when generating a filtered summary with no existing summary. Moreover, pressing q (rmail-summary-quit) will kill the summary so the next filter starts from scratch. I add a function called rmail-summary--exists-1. The existing rmail-summary-exists is not enough and I didn't know if changing it could break something. Andrea Monaco Fix application of consecutive filters in rmail. * lisp/mail/rmailsum.el (rmail-summary-intersect-consecutive-filters): Change name. (rmail-summary-currently-displayed-msgs): Change to a bool-vector that is more natural. (rmail-summary-populate-displayed-messages): Change name. (rmail-summary--exists-1): New function. (rmail-summary-by-labels, rmail-summary-by-recipients) (rmail-summary-by-regexp, rmail-summary-by-topic) (rmail-summary-by-senders): Fix so they work correctly when they are invoked and no summary exists. diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el index 0144a34e5e..b522449157 100644 --- a/lisp/mail/rmailsum.el +++ b/lisp/mail/rmailsum.el @@ -50,21 +50,18 @@ rmail-summary-line-count-flag :type 'boolean :group 'rmail-summary) -(defcustom rmail-summary-apply-filters-consecutively nil - "If non-nil, Rmail summary commands apply filtering on top existing filtering. -When this variable is non-nil, `rmail-summary-by-*' commands work on the -current summary, and so their filtering can be stacked one on top of another. -This allows gradual narrowing of the selection of the messages." +(defcustom rmail-summary-intersect-consecutive-filters nil + "Non-nil means that commands rmail-summary-by-* works on the +current summary and so can be intersected one after the other." :type 'boolean :version "29.1" :group 'rmail-summary) (defvar rmail-summary-currently-displayed-msgs nil - "String made of `y' and `n'. -The character at position i tells wether message i is shown in the -summary or not. First character is ignored. -Used when applying `rmail-summary-by-*' commands consecutively. Filled -by `rmail-summary-fill-displayed-messages'.") + "Boolean vector that for index i tells whether message i is +shown on the summary or not. First element is ignored. Used +when applying rmail-summary-by-* commands consecutively. Filled +by rmail-summary-populate-displayed-messages.") (put 'rmail-summary-currently-displayed-msgs 'permanent-local t) (defvar rmail-summary-font-lock-keywords @@ -284,33 +281,39 @@ rmail-summary-mode-map (defun rmail-update-summary (&rest _) (apply (car rmail-summary-redo) (cdr rmail-summary-redo))) -(defun rmail-summary-fill-displayed-messages () - "Fill the rmail-summary-currently-displayed-msgs string." +(defun rmail-summary-populate-displayed-messages () + "Populate the rmail-summary-currently-displayed-msgs vector." (with-current-buffer rmail-buffer - (with-current-buffer rmail-summary-buffer - (setq rmail-summary-currently-displayed-msgs - (make-string (1+ rmail-total-messages) ?n)) - (goto-char (point-min)) - (while (not (eobp)) - (aset rmail-summary-currently-displayed-msgs - (string-to-number (thing-at-point 'line)) - ?y) - (forward-line 1))))) + (let ((totmsgs rmail-total-messages)) + (with-current-buffer rmail-summary-buffer + (setq rmail-summary-currently-displayed-msgs + (make-bool-vector (1+ totmsgs) nil)) + (goto-char (point-min)) + (while (not (eobp)) + (aset rmail-summary-currently-displayed-msgs + (string-to-number (thing-at-point 'line)) + t) + (forward-line 1)))))) (defun rmail-summary-negate () - "Toggle display of messages that match the summary and those which do not." + "Negate the current summary. That is, show the messages that +are not displayed, and vice versa." (interactive) - (rmail-summary-fill-displayed-messages) + (rmail-summary-populate-displayed-messages) (rmail-new-summary "Negate" '(rmail-summary-by-regexp ".*") (lambda (msg) (if - (= (aref rmail-summary-currently-displayed-msgs msg) - ?n) - (progn - (aset rmail-summary-currently-displayed-msgs msg ?y) t) - (progn - (aset rmail-summary-currently-displayed-msgs msg ?n) nil))))) + (eq (aref rmail-summary-currently-displayed-msgs msg) + nil) + (aset rmail-summary-currently-displayed-msgs msg t) + (aset rmail-summary-currently-displayed-msgs msg nil))))) + +(defun rmail-summary--exists-1 () + "Like rmail-summary-exists, but works in both main and summary buffers." + (with-current-buffer rmail-buffer + (and rmail-summary-buffer (buffer-name rmail-summary-buffer) + rmail-summary-buffer))) ;;;###autoload (defun rmail-summary () @@ -327,14 +330,16 @@ rmail-summary-by-labels (setq labels (or rmail-last-multi-labels (error "No label specified")))) (setq rmail-last-multi-labels labels) - (if rmail-summary-apply-filters-consecutively - (rmail-summary-fill-displayed-messages)) + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) + (rmail-summary-populate-displayed-messages)) (rmail-new-summary (concat "labels " labels) (list 'rmail-summary-by-labels labels) - (if rmail-summary-apply-filters-consecutively + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) (lambda (msg l) - (and (= (aref rmail-summary-currently-displayed-msgs msg) - ?y) + (and (eq (aref rmail-summary-currently-displayed-msgs msg) + t) (rmail-message-labels-p msg l))) 'rmail-message-labels-p) (concat " \\(" @@ -349,15 +354,17 @@ rmail-summary-by-recipients only look in the To and From fields. RECIPIENTS is a regular expression." (interactive "sRecipients to summarize by: \nP") - (if rmail-summary-apply-filters-consecutively - (rmail-summary-fill-displayed-messages)) + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) + (rmail-summary-populate-displayed-messages)) (rmail-new-summary (concat "recipients " recipients) (list 'rmail-summary-by-recipients recipients primary-only) - (if rmail-summary-apply-filters-consecutively + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) (lambda (msg r &optional po) - (and (= (aref rmail-summary-currently-displayed-msgs msg) - ?y) + (and (eq (aref rmail-summary-currently-displayed-msgs msg) + t) (rmail-message-recipients-p msg r po))) 'rmail-message-recipients-p) recipients primary-only)) @@ -388,14 +395,16 @@ rmail-summary-by-regexp (setq regexp (or rmail-last-regexp (error "No regexp specified")))) (setq rmail-last-regexp regexp) - (if rmail-summary-apply-filters-consecutively - (rmail-summary-fill-displayed-messages)) + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) + (rmail-summary-populate-displayed-messages)) (rmail-new-summary (concat "regexp " regexp) (list 'rmail-summary-by-regexp regexp) - (if rmail-summary-apply-filters-consecutively + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) (lambda (msg r) - (and (= (aref rmail-summary-currently-displayed-msgs msg) - ?y) + (and (eq (aref rmail-summary-currently-displayed-msgs msg) + t) (rmail-message-regexp-p msg r))) 'rmail-message-regexp-p) regexp)) @@ -443,15 +452,17 @@ rmail-summary-by-topic (if subject ", default current subject" "") "): "))) (list (read-string prompt nil nil subject) current-prefix-arg))) - (if rmail-summary-apply-filters-consecutively - (rmail-summary-fill-displayed-messages)) + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) + (rmail-summary-populate-displayed-messages)) (rmail-new-summary (concat "about " subject) (list 'rmail-summary-by-topic subject whole-message) - (if rmail-summary-apply-filters-consecutively + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) (lambda (msg s &optional wm) - (and (= (aref rmail-summary-currently-displayed-msgs msg) - ?y) + (and (eq (aref rmail-summary-currently-displayed-msgs msg) + t) (rmail-message-subject-p msg s wm))) 'rmail-message-subject-p) subject whole-message)) @@ -477,15 +488,17 @@ rmail-summary-by-senders (if sender ", default this message's sender" "") "): "))) (list (read-string prompt nil nil sender)))) - (if rmail-summary-apply-filters-consecutively - (rmail-summary-fill-displayed-messages)) + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) + (rmail-summary-populate-displayed-messages)) (rmail-new-summary (concat "senders " senders) (list 'rmail-summary-by-senders senders) - (if rmail-summary-apply-filters-consecutively + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) (lambda (msg s) - (and (= (aref rmail-summary-currently-displayed-msgs msg) - ?y) + (and (eq (aref rmail-summary-currently-displayed-msgs msg) + t) (rmail-message-senders-p msg s))) 'rmail-message-senders-p) senders)) ^ permalink raw reply related [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-10-28 13:26 ` Andrea Monaco @ 2022-11-06 7:34 ` Eli Zaretskii 2022-11-07 14:13 ` Andrea Monaco 0 siblings, 1 reply; 83+ messages in thread From: Eli Zaretskii @ 2022-11-06 7:34 UTC (permalink / raw) To: Andrea Monaco; +Cc: rms, rpluim, emacs-devel > From: Andrea Monaco <andrea.monaco@autistici.org> > Cc: rms@gnu.org, rpluim@gmail.com, emacs-devel@gnu.org > Date: Fri, 28 Oct 2022 15:26:39 +0200 > > This version should be final. Famous last words ;-) Seriously, though: having to apply 3 patches one on top of the other is something I'd like to avoid, so in the future if you don't feel the patch is final, please say so when you post it, to prevent me from doing unnecessary jobs. I have several comments to the patch, mainly on the doc strings: > -(defcustom rmail-summary-apply-filters-consecutively nil > - "If non-nil, Rmail summary commands apply filtering on top existing filtering. > -When this variable is non-nil, `rmail-summary-by-*' commands work on the > -current summary, and so their filtering can be stacked one on top of another. > -This allows gradual narrowing of the selection of the messages." > +(defcustom rmail-summary-intersect-consecutive-filters nil > + "Non-nil means that commands rmail-summary-by-* works on the > +current summary and so can be intersected one after the other." The first line of a doc string must be a complete sentence. In the original code, I made sure that was so, but your changes destroy that. In addition, I don't think I understand what you mean by "intersected", and neither will users who will read this doc string. Please think of some better, clearer description, if you think the original one was inaccurate or incorrect for some reason. > (defvar rmail-summary-currently-displayed-msgs nil > - "String made of `y' and `n'. > -The character at position i tells wether message i is shown in the > -summary or not. First character is ignored. > -Used when applying `rmail-summary-by-*' commands consecutively. Filled > -by `rmail-summary-fill-displayed-messages'.") > + "Boolean vector that for index i tells whether message i is > +shown on the summary or not. First element is ignored. Used > +when applying rmail-summary-by-* commands consecutively. Filled > +by rmail-summary-populate-displayed-messages.") Same here: the first line must be a complete sentence. Also, references to variables and functions inside doc string should be quoted `like this', to allow Help commands to create hyperlinks from them. > -(defun rmail-summary-fill-displayed-messages () > - "Fill the rmail-summary-currently-displayed-msgs string." > +(defun rmail-summary-populate-displayed-messages () > + "Populate the rmail-summary-currently-displayed-msgs vector." Quoting of variable names again. > (defun rmail-summary-negate () > - "Toggle display of messages that match the summary and those which do not." > + "Negate the current summary. That is, show the messages that > +are not displayed, and vice versa." The first line of a doc string must be a single complete sentence. And I don't really understand why you changed the original doc string. Was it incorrect? I think using "negate" is not a good idea, since it's too technical and doesn't explain clearly enough what this command does. The original doc string attempted to clarify that in simple terms. > +(defun rmail-summary--exists-1 () > + "Like rmail-summary-exists, but works in both main and summary buffers." Please quote `like this' the function name mentioned in the doc string. Thanks. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-06 7:34 ` Eli Zaretskii @ 2022-11-07 14:13 ` Andrea Monaco 2022-11-08 5:02 ` Richard Stallman ` (2 more replies) 0 siblings, 3 replies; 83+ messages in thread From: Andrea Monaco @ 2022-11-07 14:13 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, rpluim, emacs-devel The words "negate" and "intersect" come from logic and mathematics. They might not be especially common, but they are very precise. So I kept them and expanded on their meaning in the rest of the docstrings. Andrea Monaco diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el index 0144a34e5e..011a0e81ac 100644 --- a/lisp/mail/rmailsum.el +++ b/lisp/mail/rmailsum.el @@ -50,21 +50,19 @@ rmail-summary-line-count-flag :type 'boolean :group 'rmail-summary) -(defcustom rmail-summary-apply-filters-consecutively nil - "If non-nil, Rmail summary commands apply filtering on top existing filtering. -When this variable is non-nil, `rmail-summary-by-*' commands work on the -current summary, and so their filtering can be stacked one on top of another. -This allows gradual narrowing of the selection of the messages." +(defcustom rmail-summary-intersect-consecutive-filters nil + "Non-nil means that consecutive rmail-summary-by-* commands intersect. +This way, the user can apply one filter after the other and keep +narrowing the result." :type 'boolean :version "29.1" :group 'rmail-summary) (defvar rmail-summary-currently-displayed-msgs nil - "String made of `y' and `n'. -The character at position i tells wether message i is shown in the -summary or not. First character is ignored. -Used when applying `rmail-summary-by-*' commands consecutively. Filled -by `rmail-summary-fill-displayed-messages'.") + "Boolean vector that tells which messages are displayed in the summary. +First element is ignored. Used when applying rmail-summary-by-* +commands consecutively. Filled by +`rmail-summary-populate-displayed-messages'.") (put 'rmail-summary-currently-displayed-msgs 'permanent-local t) (defvar rmail-summary-font-lock-keywords @@ -284,33 +282,40 @@ rmail-summary-mode-map (defun rmail-update-summary (&rest _) (apply (car rmail-summary-redo) (cdr rmail-summary-redo))) -(defun rmail-summary-fill-displayed-messages () - "Fill the rmail-summary-currently-displayed-msgs string." +(defun rmail-summary-populate-displayed-messages () + "Populate the `rmail-summary-currently-displayed-msgs' vector." (with-current-buffer rmail-buffer - (with-current-buffer rmail-summary-buffer - (setq rmail-summary-currently-displayed-msgs - (make-string (1+ rmail-total-messages) ?n)) - (goto-char (point-min)) - (while (not (eobp)) - (aset rmail-summary-currently-displayed-msgs - (string-to-number (thing-at-point 'line)) - ?y) - (forward-line 1))))) + (let ((totmsgs rmail-total-messages)) + (with-current-buffer rmail-summary-buffer + (setq rmail-summary-currently-displayed-msgs + (make-bool-vector (1+ totmsgs) nil)) + (goto-char (point-min)) + (while (not (eobp)) + (aset rmail-summary-currently-displayed-msgs + (string-to-number (thing-at-point 'line)) + t) + (forward-line 1)))))) (defun rmail-summary-negate () - "Toggle display of messages that match the summary and those which do not." + "Negate the current summary. +That is, show the messages that are not displayed, and vice +versa." (interactive) - (rmail-summary-fill-displayed-messages) + (rmail-summary-populate-displayed-messages) (rmail-new-summary "Negate" '(rmail-summary-by-regexp ".*") (lambda (msg) (if - (= (aref rmail-summary-currently-displayed-msgs msg) - ?n) - (progn - (aset rmail-summary-currently-displayed-msgs msg ?y) t) - (progn - (aset rmail-summary-currently-displayed-msgs msg ?n) nil))))) + (eq (aref rmail-summary-currently-displayed-msgs msg) + nil) + (aset rmail-summary-currently-displayed-msgs msg t) + (aset rmail-summary-currently-displayed-msgs msg nil))))) + +(defun rmail-summary--exists-1 () + "Like `rmail-summary-exists', but works in both main and summary buffers." + (with-current-buffer rmail-buffer + (and rmail-summary-buffer (buffer-name rmail-summary-buffer) + rmail-summary-buffer))) ;;;###autoload (defun rmail-summary () @@ -327,14 +332,16 @@ rmail-summary-by-labels (setq labels (or rmail-last-multi-labels (error "No label specified")))) (setq rmail-last-multi-labels labels) - (if rmail-summary-apply-filters-consecutively - (rmail-summary-fill-displayed-messages)) + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) + (rmail-summary-populate-displayed-messages)) (rmail-new-summary (concat "labels " labels) (list 'rmail-summary-by-labels labels) - (if rmail-summary-apply-filters-consecutively + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) (lambda (msg l) - (and (= (aref rmail-summary-currently-displayed-msgs msg) - ?y) + (and (eq (aref rmail-summary-currently-displayed-msgs msg) + t) (rmail-message-labels-p msg l))) 'rmail-message-labels-p) (concat " \\(" @@ -349,15 +356,17 @@ rmail-summary-by-recipients only look in the To and From fields. RECIPIENTS is a regular expression." (interactive "sRecipients to summarize by: \nP") - (if rmail-summary-apply-filters-consecutively - (rmail-summary-fill-displayed-messages)) + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) + (rmail-summary-populate-displayed-messages)) (rmail-new-summary (concat "recipients " recipients) (list 'rmail-summary-by-recipients recipients primary-only) - (if rmail-summary-apply-filters-consecutively + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) (lambda (msg r &optional po) - (and (= (aref rmail-summary-currently-displayed-msgs msg) - ?y) + (and (eq (aref rmail-summary-currently-displayed-msgs msg) + t) (rmail-message-recipients-p msg r po))) 'rmail-message-recipients-p) recipients primary-only)) @@ -388,14 +397,16 @@ rmail-summary-by-regexp (setq regexp (or rmail-last-regexp (error "No regexp specified")))) (setq rmail-last-regexp regexp) - (if rmail-summary-apply-filters-consecutively - (rmail-summary-fill-displayed-messages)) + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) + (rmail-summary-populate-displayed-messages)) (rmail-new-summary (concat "regexp " regexp) (list 'rmail-summary-by-regexp regexp) - (if rmail-summary-apply-filters-consecutively + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) (lambda (msg r) - (and (= (aref rmail-summary-currently-displayed-msgs msg) - ?y) + (and (eq (aref rmail-summary-currently-displayed-msgs msg) + t) (rmail-message-regexp-p msg r))) 'rmail-message-regexp-p) regexp)) @@ -443,15 +454,17 @@ rmail-summary-by-topic (if subject ", default current subject" "") "): "))) (list (read-string prompt nil nil subject) current-prefix-arg))) - (if rmail-summary-apply-filters-consecutively - (rmail-summary-fill-displayed-messages)) + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) + (rmail-summary-populate-displayed-messages)) (rmail-new-summary (concat "about " subject) (list 'rmail-summary-by-topic subject whole-message) - (if rmail-summary-apply-filters-consecutively + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) (lambda (msg s &optional wm) - (and (= (aref rmail-summary-currently-displayed-msgs msg) - ?y) + (and (eq (aref rmail-summary-currently-displayed-msgs msg) + t) (rmail-message-subject-p msg s wm))) 'rmail-message-subject-p) subject whole-message)) @@ -477,15 +490,17 @@ rmail-summary-by-senders (if sender ", default this message's sender" "") "): "))) (list (read-string prompt nil nil sender)))) - (if rmail-summary-apply-filters-consecutively - (rmail-summary-fill-displayed-messages)) + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) + (rmail-summary-populate-displayed-messages)) (rmail-new-summary (concat "senders " senders) (list 'rmail-summary-by-senders senders) - (if rmail-summary-apply-filters-consecutively + (if (and rmail-summary-intersect-consecutive-filters + (rmail-summary--exists-1)) (lambda (msg s) - (and (= (aref rmail-summary-currently-displayed-msgs msg) - ?y) + (and (eq (aref rmail-summary-currently-displayed-msgs msg) + t) (rmail-message-senders-p msg s))) 'rmail-message-senders-p) senders)) ^ permalink raw reply related [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-07 14:13 ` Andrea Monaco @ 2022-11-08 5:02 ` Richard Stallman 2022-11-08 8:04 ` Andrea Monaco 2022-11-10 4:04 ` Richard Stallman 2022-11-17 13:34 ` Eli Zaretskii 2 siblings, 1 reply; 83+ messages in thread From: Richard Stallman @ 2022-11-08 5:02 UTC (permalink / raw) To: Andrea Monaco; +Cc: eliz, rpluim, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] We were discussing what the behavior should be for intersecting filters -- when to do that, when not to. What is the behavior that you have implemented in this version? (That will be needed for documenting it.) -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-08 5:02 ` Richard Stallman @ 2022-11-08 8:04 ` Andrea Monaco 2022-11-14 3:13 ` Richard Stallman 0 siblings, 1 reply; 83+ messages in thread From: Andrea Monaco @ 2022-11-08 8:04 UTC (permalink / raw) To: rms; +Cc: eliz, rpluim, emacs-devel > What is the behavior that you have implemented in this version? When rmail-summary-intersect-consecutive-filters is nil, the old behavior applies. When it is non-nil, filters intersect and pressing q (rmail-summary-quit) cancels all filters. Andrea Monaco ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-08 8:04 ` Andrea Monaco @ 2022-11-14 3:13 ` Richard Stallman 0 siblings, 0 replies; 83+ messages in thread From: Richard Stallman @ 2022-11-14 3:13 UTC (permalink / raw) To: Andrea Monaco; +Cc: eliz, rpluim, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > When rmail-summary-intersect-consecutive-filters is nil, the old > behavior applies. When it is non-nil, filters intersect and pressing q > (rmail-summary-quit) cancels all filters. Thanks. That's exactly what I would expect. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-07 14:13 ` Andrea Monaco 2022-11-08 5:02 ` Richard Stallman @ 2022-11-10 4:04 ` Richard Stallman 2022-11-10 8:06 ` Eli Zaretskii 2022-11-17 13:34 ` Eli Zaretskii 2 siblings, 1 reply; 83+ messages in thread From: Richard Stallman @ 2022-11-10 4:04 UTC (permalink / raw) To: Andrea Monaco; +Cc: eliz, rpluim, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > + "Non-nil means that consecutive rmail-summary-by-* commands intersect. > +This way, the user can apply one filter after the other and keep > +narrowing the result." The words "consecutive commands" mean that one immediately follows the other, with no other commands in between. Is that the way you've implemented it? I am not sure, but my guess is not. Does it mean "using one summary filtering cpmmand when a filtered summary already exists"? That is the meaning I would expect in this case. But if so, "consecutive commands" is not the way to say it. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-10 4:04 ` Richard Stallman @ 2022-11-10 8:06 ` Eli Zaretskii 2022-11-10 8:53 ` Robert Pluim 2022-11-11 4:36 ` Richard Stallman 0 siblings, 2 replies; 83+ messages in thread From: Eli Zaretskii @ 2022-11-10 8:06 UTC (permalink / raw) To: rms; +Cc: andrea.monaco, rpluim, emacs-devel > From: Richard Stallman <rms@gnu.org> > Cc: eliz@gnu.org, rpluim@gmail.com, emacs-devel@gnu.org > Date: Wed, 09 Nov 2022 23:04:02 -0500 > > Does it mean "using one summary filtering cpmmand when a filtered > summary already exists"? That is the meaning I would expect in this > case. But if so, "consecutive commands" is not the way to say it. Your guess is correct. I was struggling with finding a good description for this. What would you suggest as a good wording? ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-10 8:06 ` Eli Zaretskii @ 2022-11-10 8:53 ` Robert Pluim 2022-11-11 4:36 ` Richard Stallman 1 sibling, 0 replies; 83+ messages in thread From: Robert Pluim @ 2022-11-10 8:53 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, andrea.monaco, emacs-devel >>>>> On Thu, 10 Nov 2022 10:06:00 +0200, Eli Zaretskii <eliz@gnu.org> said: >> From: Richard Stallman <rms@gnu.org> >> Cc: eliz@gnu.org, rpluim@gmail.com, emacs-devel@gnu.org >> Date: Wed, 09 Nov 2022 23:04:02 -0500 >> >> Does it mean "using one summary filtering cpmmand when a filtered >> summary already exists"? That is the meaning I would expect in this >> case. But if so, "consecutive commands" is not the way to say it. Eli> Your guess is correct. I was struggling with finding a good Eli> description for this. What would you suggest as a good wording? I think we can keep it down to one sentence if we follow the 'describe what it affects' guidance for docstrings, which allows dropping the 'if non-nil' bit. So something like: "Whether summary filtering commands apply to an existing summary. If nil, a new filtered summary is created, if non-nil, subsequent filtering commands apply to an existing filtered summary. This allows the user to apply one filter after the other and keep narrowing the results." (the name of the option may need to change) Robert -- ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-10 8:06 ` Eli Zaretskii 2022-11-10 8:53 ` Robert Pluim @ 2022-11-11 4:36 ` Richard Stallman 2022-11-11 8:06 ` Eli Zaretskii 1 sibling, 1 reply; 83+ messages in thread From: Richard Stallman @ 2022-11-11 4:36 UTC (permalink / raw) To: Eli Zaretskii; +Cc: andrea.monaco, rpluim, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Your guess is correct. I was struggling with finding a good > description for this. What would you suggest as a good wording? Well, how about "Using a summary filtering command when a filtered summary already exists"? It may not be the best possible wordin, but at least it's correct and unambiguous. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 4:36 ` Richard Stallman @ 2022-11-11 8:06 ` Eli Zaretskii 2022-11-11 14:59 ` Juanma Barranquero ` (2 more replies) 0 siblings, 3 replies; 83+ messages in thread From: Eli Zaretskii @ 2022-11-11 8:06 UTC (permalink / raw) To: rms; +Cc: andrea.monaco, rpluim, emacs-devel > From: Richard Stallman <rms@gnu.org> > Cc: andrea.monaco@autistici.org, rpluim@gmail.com, emacs-devel@gnu.org > Date: Thu, 10 Nov 2022 23:36:15 -0500 > > > Your guess is correct. I was struggling with finding a good > > description for this. What would you suggest as a good wording? > > Well, how about "Using a summary filtering command when a filtered > summary already exists"? > > It may not be the best possible wordin, but at least it's correct and > unambiguous. That's okay, thanks. But it's only the beginning of my problem. How do you describe the effect of applying a filter on top of one or more other filters? Andrea wants to use "intersection", but I tend to think this is too "mathematical" and too vague to explain clearly what happens. What would be a good terminology for that? ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 8:06 ` Eli Zaretskii @ 2022-11-11 14:59 ` Juanma Barranquero 2022-11-11 17:23 ` Eli Zaretskii 2022-11-11 17:32 ` [External] : " Drew Adams 2022-11-11 18:00 ` Gregory Heytings 2022-11-12 3:35 ` Richard Stallman 2 siblings, 2 replies; 83+ messages in thread From: Juanma Barranquero @ 2022-11-11 14:59 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, andrea.monaco, rpluim, emacs-devel [-- Attachment #1: Type: text/plain, Size: 202 bytes --] > How do you describe the effect of applying a filter on top of one or more other filters? Perhaps they "compose", using the verb in the meaning "to form (a whole) by ordering or arranging the parts". [-- Attachment #2: Type: text/html, Size: 471 bytes --] ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 14:59 ` Juanma Barranquero @ 2022-11-11 17:23 ` Eli Zaretskii 2022-11-11 17:32 ` [External] : " Drew Adams 1 sibling, 0 replies; 83+ messages in thread From: Eli Zaretskii @ 2022-11-11 17:23 UTC (permalink / raw) To: Juanma Barranquero; +Cc: rms, andrea.monaco, rpluim, emacs-devel > From: Juanma Barranquero <lekktu@gmail.com> > Date: Fri, 11 Nov 2022 15:59:10 +0100 > Cc: rms@gnu.org, andrea.monaco@autistici.org, rpluim@gmail.com, > emacs-devel@gnu.org > > > How do you describe the effect of applying a filter on top of one or more other filters? > > Perhaps they "compose", using the verb in the meaning "to form (a whole) by ordering or arranging the > parts". Thanks, but that's not what this feature does. ^ permalink raw reply [flat|nested] 83+ messages in thread
* RE: [External] : Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 14:59 ` Juanma Barranquero 2022-11-11 17:23 ` Eli Zaretskii @ 2022-11-11 17:32 ` Drew Adams 1 sibling, 0 replies; 83+ messages in thread From: Drew Adams @ 2022-11-11 17:32 UTC (permalink / raw) To: Juanma Barranquero, Eli Zaretskii Cc: rms@gnu.org, andrea.monaco@autistici.org, rpluim@gmail.com, emacs-devel@gnu.org Not really following this thread, but ... HTH. I think what's being described is what I call "progressive" filtering/narrowing. Whether or not other operations are carried out between two successive filtering operations is, IMO, immaterial. "Consecutive" application of filters doesn't imply absence of other operations between filtering operations (but someone might think that). "Successive" is better than "consecutive" in this regard: "consecutive" is "successive without a break". How filtering is done (pattern matching, predicate application, something else) is also immaterial. You're just narrowing a set of <whatevers> in some way, IIUC. For Icicles "progressive completion", which is the same kind of thing, I also describe it as similar to `grep' chaining/cascading, which involves piping the output of one `grep' to the next one (possibly after other operations that also emit a stream of chars). Not all Emacs users are programmers, but many are familiar with piping `grep'. And I do describe it as set intersection, as well as ANDing (Boolean multiplication). Key sequences for it include the use of key `*' (or `&' when a predicate is used instead of a pattern). (For set union / ORing, keys include the use of `+', for Boolean addition.) I don't think "intersect(ion)" is hard for Emacs users (including nonprogrammers) to understand. It's not only "mathematical", and it's not esoteric. Just one opinion. HTH. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 8:06 ` Eli Zaretskii 2022-11-11 14:59 ` Juanma Barranquero @ 2022-11-11 18:00 ` Gregory Heytings 2022-11-11 18:19 ` Eli Zaretskii 2022-11-11 18:22 ` [External] : " Drew Adams 2022-11-12 3:35 ` Richard Stallman 2 siblings, 2 replies; 83+ messages in thread From: Gregory Heytings @ 2022-11-11 18:00 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, andrea.monaco, rpluim, emacs-devel >> Well, how about "Using a summary filtering command when a filtered >> summary already exists"? >> >> It may not be the best possible wordin, but at least it's correct and >> unambiguous. > > That's okay, thanks. But it's only the beginning of my problem. How do > you describe the effect of applying a filter on top of one or more other > filters? Andrea wants to use "intersection", but I tend to think this > is too "mathematical" and too vague to explain clearly what happens. > What would be a good terminology for that? > I think there are two possibilities when adding another filter: either broadening the already existing filtering ("union" in mathematical terms) or narrowing the already existing filtering ("intersection" in mathematical terms). ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 18:00 ` Gregory Heytings @ 2022-11-11 18:19 ` Eli Zaretskii 2022-11-11 18:52 ` Gregory Heytings 2022-11-11 18:22 ` [External] : " Drew Adams 1 sibling, 1 reply; 83+ messages in thread From: Eli Zaretskii @ 2022-11-11 18:19 UTC (permalink / raw) To: Gregory Heytings; +Cc: rms, andrea.monaco, rpluim, emacs-devel > Date: Fri, 11 Nov 2022 18:00:06 +0000 > From: Gregory Heytings <gregory@heytings.org> > cc: rms@gnu.org, andrea.monaco@autistici.org, rpluim@gmail.com, > emacs-devel@gnu.org > > > That's okay, thanks. But it's only the beginning of my problem. How do > > you describe the effect of applying a filter on top of one or more other > > filters? Andrea wants to use "intersection", but I tend to think this > > is too "mathematical" and too vague to explain clearly what happens. > > What would be a good terminology for that? > > I think there are two possibilities when adding another filter: either > broadening the already existing filtering ("union" in mathematical terms) > or narrowing the already existing filtering ("intersection" in > mathematical terms). It's what you call "intersection", obviously. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 18:19 ` Eli Zaretskii @ 2022-11-11 18:52 ` Gregory Heytings 2022-11-11 18:54 ` Gregory Heytings 2022-11-11 19:33 ` Eli Zaretskii 0 siblings, 2 replies; 83+ messages in thread From: Gregory Heytings @ 2022-11-11 18:52 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, andrea.monaco, rpluim, emacs-devel >>> That's okay, thanks. But it's only the beginning of my problem. How >>> do you describe the effect of applying a filter on top of one or more >>> other filters? Andrea wants to use "intersection", but I tend to >>> think this is too "mathematical" and too vague to explain clearly what >>> happens. What would be a good terminology for that? >> >> I think there are two possibilities when adding another filter: either >> broadening the already existing filtering ("union" in mathematical >> terms) or narrowing the already existing filtering ("intersection" in >> mathematical terms). > > It's what you call "intersection", obviously. > Yes, my point was to mention the two less mathematical words: broadening and narrowing. That being said, I don't user Rmail but I don't think it obvious that filtering is always "intersection". Someone may filter their inbox to see mails from Alice, and add mails from Alice to the filtering. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 18:52 ` Gregory Heytings @ 2022-11-11 18:54 ` Gregory Heytings 2022-11-11 19:34 ` Eli Zaretskii 2022-11-11 19:33 ` Eli Zaretskii 1 sibling, 1 reply; 83+ messages in thread From: Gregory Heytings @ 2022-11-11 18:54 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, andrea.monaco, rpluim, emacs-devel >>>> That's okay, thanks. But it's only the beginning of my problem. >>>> How do you describe the effect of applying a filter on top of one or >>>> more other filters? Andrea wants to use "intersection", but I tend >>>> to think this is too "mathematical" and too vague to explain clearly >>>> what happens. What would be a good terminology for that? >>> >>> I think there are two possibilities when adding another filter: either >>> broadening the already existing filtering ("union" in mathematical >>> terms) or narrowing the already existing filtering ("intersection" in >>> mathematical terms). >> >> It's what you call "intersection", obviously. > > Yes, my point was to mention the two less mathematical words: broadening > and narrowing. > > That being said, I don't user Rmail but I don't think it obvious that > filtering is always "intersection". Someone may filter their inbox to > see mails from Alice, and add mails from Alice to the filtering. > Too many typos, sorry: That being said, I don't use Rmail but I don't think it is obvious that filtering is always "intersection". Someone may filter their inbox to see mails from Alice, and add mails from Bob to the filtering. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 18:54 ` Gregory Heytings @ 2022-11-11 19:34 ` Eli Zaretskii 0 siblings, 0 replies; 83+ messages in thread From: Eli Zaretskii @ 2022-11-11 19:34 UTC (permalink / raw) To: Gregory Heytings; +Cc: rms, andrea.monaco, rpluim, emacs-devel > Date: Fri, 11 Nov 2022 18:54:36 +0000 > From: Gregory Heytings <gregory@heytings.org> > cc: rms@gnu.org, andrea.monaco@autistici.org, rpluim@gmail.com, > emacs-devel@gnu.org > > Too many typos, sorry: That being said, I don't use Rmail but I don't > think it is obvious that filtering is always "intersection". Someone may > filter their inbox to see mails from Alice, and add mails from Bob to the > filtering. It isn't called "filtering", and it is always "intersection". ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 18:52 ` Gregory Heytings 2022-11-11 18:54 ` Gregory Heytings @ 2022-11-11 19:33 ` Eli Zaretskii 2022-11-11 20:50 ` Gregory Heytings 1 sibling, 1 reply; 83+ messages in thread From: Eli Zaretskii @ 2022-11-11 19:33 UTC (permalink / raw) To: Gregory Heytings; +Cc: rms, andrea.monaco, rpluim, emacs-devel > Date: Fri, 11 Nov 2022 18:52:28 +0000 > From: Gregory Heytings <gregory@heytings.org> > cc: rms@gnu.org, andrea.monaco@autistici.org, rpluim@gmail.com, > emacs-devel@gnu.org > > Yes, my point was to mention the two less mathematical words: broadening > and narrowing. Narrowing is already being used, but it needs explanation, being a general notion. I was looking for a single word or max 2 words, > That being said, I don't user Rmail but I don't think it obvious that > filtering is always "intersection". Someone may filter their inbox to see > mails from Alice, and add mails from Alice to the filtering. You could read about it in the manual. It doesn't make a lot of sense to suggest terminology for features you are not familiar with. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 19:33 ` Eli Zaretskii @ 2022-11-11 20:50 ` Gregory Heytings 2022-11-12 3:37 ` Richard Stallman 2022-11-12 6:57 ` Eli Zaretskii 0 siblings, 2 replies; 83+ messages in thread From: Gregory Heytings @ 2022-11-11 20:50 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, andrea.monaco, rpluim, emacs-devel >> Yes, my point was to mention the two less mathematical words: >> broadening and narrowing. > > Narrowing is already being used, but it needs explanation, being a > general notion. I was looking for a single word or max 2 words, > This subtread is about rmail-summary-apply-filters-consecutively, right? Here's an attempt to make it clearer: If non-nil, apply Rmail summary commands on the already existing filtering. When this variable is non-nil, `rmail-summary-by-*' commands work on the already existing summary, if any. This allows gradual narrowing of the selection of messages, that is, each `rmail-summary-by-*' command restricts the selection of messages further. When this variable is nil, each `rmail-summary-by-*' command is applied anew on the entire mailbox. >> That being said, I don't user Rmail but I don't think it obvious that >> filtering is always "intersection". Someone may filter their inbox to >> see mails from Alice, and add mails from Alice to the filtering. > > You could read about it in the manual. It doesn't make a lot of sense > to suggest terminology for features you are not familiar with. > Well, the fact that I don't use Rmail doesn't mean that I'm not familiar with that feature, which exists in other MUAs. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 20:50 ` Gregory Heytings @ 2022-11-12 3:37 ` Richard Stallman 2022-11-12 7:52 ` Eli Zaretskii 2022-11-12 6:57 ` Eli Zaretskii 1 sibling, 1 reply; 83+ messages in thread From: Richard Stallman @ 2022-11-12 3:37 UTC (permalink / raw) To: Gregory Heytings; +Cc: eliz, andrea.monaco, rpluim, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] Perhaps "serial filtering" is a good way to describe the new feature. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-12 3:37 ` Richard Stallman @ 2022-11-12 7:52 ` Eli Zaretskii 0 siblings, 0 replies; 83+ messages in thread From: Eli Zaretskii @ 2022-11-12 7:52 UTC (permalink / raw) To: rms; +Cc: gregory, andrea.monaco, rpluim, emacs-devel > From: Richard Stallman <rms@gnu.org> > Cc: eliz@gnu.org, andrea.monaco@autistici.org, rpluim@gmail.com, > emacs-devel@gnu.org > Date: Fri, 11 Nov 2022 22:37:42 -0500 > > Perhaps "serial filtering" is a good way to describe the new feature. No, "serial" is too general, and doesn't catch the main trait of the feature, which is that each additional "filter" narrows the selection. How about "progressive summary"? or maybe "progressively narrowing summary"? ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 20:50 ` Gregory Heytings 2022-11-12 3:37 ` Richard Stallman @ 2022-11-12 6:57 ` Eli Zaretskii 2022-11-12 16:30 ` Gregory Heytings 1 sibling, 1 reply; 83+ messages in thread From: Eli Zaretskii @ 2022-11-12 6:57 UTC (permalink / raw) To: Gregory Heytings; +Cc: rms, andrea.monaco, rpluim, emacs-devel > Date: Fri, 11 Nov 2022 20:50:10 +0000 > From: Gregory Heytings <gregory@heytings.org> > cc: rms@gnu.org, andrea.monaco@autistici.org, rpluim@gmail.com, > emacs-devel@gnu.org > > > >> Yes, my point was to mention the two less mathematical words: > >> broadening and narrowing. > > > > Narrowing is already being used, but it needs explanation, being a > > general notion. I was looking for a single word or max 2 words, > > > > This subtread is about rmail-summary-apply-filters-consecutively, right? No, it's about the name of the variable and the first sentence of its doc string. The rest is easy and not an issue. > If non-nil, apply Rmail summary commands on the already existing > filtering. "Filtering" is the wrong word here, since we are talking about Rmail summaries. Also, this is not about applying summary commands, this is about generating the summary itself. > >> That being said, I don't user Rmail but I don't think it obvious that > >> filtering is always "intersection". Someone may filter their inbox to > >> see mails from Alice, and add mails from Alice to the filtering. > > > > You could read about it in the manual. It doesn't make a lot of sense > > to suggest terminology for features you are not familiar with. > > > > Well, the fact that I don't use Rmail doesn't mean that I'm not familiar > with that feature, which exists in other MUAs. If you think about this as "filtering", then you have different features in mind, not the ones discussed here. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-12 6:57 ` Eli Zaretskii @ 2022-11-12 16:30 ` Gregory Heytings 2022-11-12 17:44 ` Andrea Monaco 0 siblings, 1 reply; 83+ messages in thread From: Gregory Heytings @ 2022-11-12 16:30 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, andrea.monaco, rpluim, emacs-devel >> Well, the fact that I don't use Rmail doesn't mean that I'm not >> familiar with that feature, which exists in other MUAs. > > If you think about this as "filtering", then you have different features > in mind, not the ones discussed here. > I just tried Rmail, again I had a very positive impression, and again I regret that it works only with mbox files and not with Maildirs. Anyway, unless I misunderstand something, the "summary" in Rmail is called the message "index" or "list" by other MUAs. And the rmail-summary-by-* commands are called "filter", "select" (a subset of messages) or "limit" (the index to a subset of messages) by other MUAs. Is "limit" perhaps a better word? For example, rmail-summary-by-recipients would become "Display a summary limited to messages with the given RECIPIENTS." This seems close to what the manual already says: "C-M-r makes a partial summary mentioning only the messages that have one or more recipients matching the regular expression rcpts". And rmail-summary-apply-filters-consecutively would be rmail-summary-gradual-limiting or rmail-summary-incremental-limiting. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-12 16:30 ` Gregory Heytings @ 2022-11-12 17:44 ` Andrea Monaco 2022-11-12 18:13 ` Gregory Heytings 2022-11-14 3:13 ` Richard Stallman 0 siblings, 2 replies; 83+ messages in thread From: Andrea Monaco @ 2022-11-12 17:44 UTC (permalink / raw) To: Gregory Heytings; +Cc: eliz, rms, rpluim, emacs-devel > I just tried Rmail, again I had a very positive impression, and > again I regret that it works only with mbox files and not with > Maildirs. I don't think that's too hard to implement, maybe I'll take a look. About the customization variable name: maybe something like rmail-summary-keep-narrowing or even rmail-summary-new-filters-keep-narrowing? Another option I proposed some time ago is to discard the global variable entirely and make separate commands like rmail-summary-further-by-*, for example rmail-summary-further-by-recipients. Andrea Monaco ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-12 17:44 ` Andrea Monaco @ 2022-11-12 18:13 ` Gregory Heytings 2022-11-14 3:13 ` Richard Stallman 2022-11-14 3:13 ` Richard Stallman 1 sibling, 1 reply; 83+ messages in thread From: Gregory Heytings @ 2022-11-12 18:13 UTC (permalink / raw) To: Andrea Monaco; +Cc: eliz, rms, rpluim, emacs-devel >> I just tried Rmail, again I had a very positive impression, and again I >> regret that it works only with mbox files and not with Maildirs. > > I don't think that's too hard to implement, maybe I'll take a look. > That would be great! > > Another option I proposed some time ago is to discard the global > variable entirely and make separate commands like > rmail-summary-further-by-*, for example > rmail-summary-further-by-recipients. > If I may, I would suggest something different: an option to query the user how they want the rmail-summary-by-* command to be applied: on the entire folder, to limit the existing summary, to extend the existing summary. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-12 18:13 ` Gregory Heytings @ 2022-11-14 3:13 ` Richard Stallman 2022-11-14 8:39 ` Gregory Heytings 0 siblings, 1 reply; 83+ messages in thread From: Richard Stallman @ 2022-11-14 3:13 UTC (permalink / raw) To: Gregory Heytings; +Cc: andrea.monaco, eliz, rpluim, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > If I may, I would suggest something different: an option to query the user > how they want the rmail-summary-by-* command to be applied: on the entire > folder, to limit the existing summary, to extend the existing summary. The first of these three options is not useful -- to get that result, just type q before the command. So there would be only two that are needed: union and intersection. C-u would be a natural way to specify this. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-14 3:13 ` Richard Stallman @ 2022-11-14 8:39 ` Gregory Heytings 2022-11-15 4:18 ` Richard Stallman 0 siblings, 1 reply; 83+ messages in thread From: Gregory Heytings @ 2022-11-14 8:39 UTC (permalink / raw) To: Richard Stallman; +Cc: andrea.monaco, eliz, rpluim, emacs-devel >> If I may, I would suggest something different: an option to query the >> user how they want the rmail-summary-by-* command to be applied: on the >> entire folder, to limit the existing summary, to extend the existing >> summary. > > The first of these three options is not useful -- to get that result, > just type q before the command. So there would be only two that are > needed: union and intersection. > A third option would be more natural, I think. After all, the first option is AFAIU the current effect of the rmail-summary-by-* command, they are applied on the entire folder and create a new summary. > > C-u would be a natural way to specify this. > C-u is already used by the rmail-summary-by-topic and rmail-summary-by-recipients commands for another purpose. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-14 8:39 ` Gregory Heytings @ 2022-11-15 4:18 ` Richard Stallman 2022-11-15 9:56 ` Gregory Heytings 2022-11-15 17:00 ` [External] : " Drew Adams 0 siblings, 2 replies; 83+ messages in thread From: Richard Stallman @ 2022-11-15 4:18 UTC (permalink / raw) To: Gregory Heytings; +Cc: emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > >> If I may, I would suggest something different: an option to query the > >> user how they want the rmail-summary-by-* command to be applied: on the > >> entire folder, to limit the existing summary, to extend the existing > >> summary. > > > > The first of these three options is not useful -- to get that result, > > just type q before the command. So there would be only two that are > > needed: union and intersection. > > > A third option would be more natural, I think. I don't follow the reasoning. After all, the first > option is AFAIU the current effect of the rmail-summary-by-* command, they > are applied on the entire folder and create a new summary. That is true -- but what does it have to do with what user interface to use for choosing between union and intersection here? I don't see how it relates. My point is that we already have q as a way to specify to disregard the previous filtering and start from "all the messages in the file." > > C-u would be a natural way to specify this. > > > C-u is already used by the rmail-summary-by-topic and > rmail-summary-by-recipients commands for another purpose. Indeed it is. Hmm. Nonetheless, prompting for the choice of set operation is not very convenient. It would be nicer to have something the user can type before the filtering command to specify how to combine it. Here's an idea. Type & to do intersection with the following filter, and type | to do union with the following filter. Both & and | are undefined in Rmail mode, so they are available for this. They will be easy to remember, too. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-15 4:18 ` Richard Stallman @ 2022-11-15 9:56 ` Gregory Heytings 2022-11-16 3:15 ` Richard Stallman 2022-11-16 3:15 ` Richard Stallman 2022-11-15 17:00 ` [External] : " Drew Adams 1 sibling, 2 replies; 83+ messages in thread From: Gregory Heytings @ 2022-11-15 9:56 UTC (permalink / raw) To: Richard Stallman; +Cc: emacs-devel >> After all, the first option is AFAIU the current effect of the >> rmail-summary-by-* command, they are applied on the entire folder and >> create a new summary. > > That is true -- but what does it have to do with what user interface to > use for choosing between union and intersection here? I don't see how it > relates. > It seems more natural, at least to me, to ask the user how they want the command to be applied. For example, currently C-M-r asks a single question: Recipients to summarize by: and each C-M-r invocation starts again from all messages in the file. Instead C-M-r could ask two questions, the first one being a multiple choice similar to y-or-n-p: New summary/Limit current summary/Extend current summary (n or l or e): > > My point is that we already have q as a way to specify to disregard the > previous filtering and start from "all the messages in the file." > Did you bind 'q' to some other command in your local customizations, perhaps? 'q' is by default bound to rmail-quit/rmail-summary-quit, which quits Rmail. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-15 9:56 ` Gregory Heytings @ 2022-11-16 3:15 ` Richard Stallman 2022-11-16 3:15 ` Richard Stallman 1 sibling, 0 replies; 83+ messages in thread From: Richard Stallman @ 2022-11-16 3:15 UTC (permalink / raw) To: Gregory Heytings; +Cc: emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > It seems more natural, at least to me, to ask the user how they want the > command to be applied. To me that seems the least convenient interface. I'd prefer an interface which doesn't ask questions. Here's a proposal. A summary filter command _in the Rmail buffer_ should always make a new summary, discarding the previous summary first. A summary filter command _in a summary buffer_ should always modify the existing summary in that buffer. If you type | first, you get union; otherwise, intersection. I think this is very natural. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-15 9:56 ` Gregory Heytings 2022-11-16 3:15 ` Richard Stallman @ 2022-11-16 3:15 ` Richard Stallman 2022-11-24 18:25 ` Andrea Monaco 1 sibling, 1 reply; 83+ messages in thread From: Richard Stallman @ 2022-11-16 3:15 UTC (permalink / raw) To: Gregory Heytings; +Cc: emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Did you bind 'q' to some other command in your local customizations, > perhaps? 'q' is by default bound to rmail-quit/rmail-summary-quit, which > quits Rmail. Indeed, I did that. I didn't remenber that I had chaged that binding in summaries. (I think the binding of q in summaries would be a good thing to change by default.) > It seems more natural, at least to me, to ask the user how they want the > command to be applied. To me that seems the least convenient kind of interface. I'd prefer an interface which doesn't need to ask questions. Here's a proposal which doesn't involve use of q. A summary filter command _in the Rmail buffer_ should always make a new summary, discarding the previous summary first. A summary filter command _in a summary buffer_ should always modify the existing summary in that buffer. If you type | first, you get union; otherwise, intersection. I think this will be both natural and convenient. Additional idea: ~ in a summary buffer could invert that summary. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-16 3:15 ` Richard Stallman @ 2022-11-24 18:25 ` Andrea Monaco 2022-11-28 21:38 ` Richard Stallman 0 siblings, 1 reply; 83+ messages in thread From: Andrea Monaco @ 2022-11-24 18:25 UTC (permalink / raw) To: rms; +Cc: gregory, emacs-devel The implementation of union and intersection of filters is still not complete. Here's my proposal: pressing '&' and '|' in either buffer could dictate how the next filter operates, by intersection and union respectively. Those keys could toggle two mutually exclusive minor modes that affect the next filter (or all subsequent filters until the user switches again). Andrea Monaco ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-24 18:25 ` Andrea Monaco @ 2022-11-28 21:38 ` Richard Stallman 0 siblings, 0 replies; 83+ messages in thread From: Richard Stallman @ 2022-11-28 21:38 UTC (permalink / raw) To: Andrea Monaco; +Cc: emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > The implementation of union and intersection of filters is still not > complete. Here's my proposal: pressing '&' and '|' in either buffer > could dictate how the next filter operates, by intersection and union > respectively. Those keys could toggle two mutually exclusive minor > modes that affect the next filter (or all subsequent filters until the > user switches again). It's not _bad_ but it is unnecessarily heavyweight and complex, and extra work to use. I suggest making & the default, so you don't need to specify that. If you type |, then if the next command is a filter command, it or's. Simple to use, and simple to document. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* RE: [External] : Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-15 4:18 ` Richard Stallman 2022-11-15 9:56 ` Gregory Heytings @ 2022-11-15 17:00 ` Drew Adams 1 sibling, 0 replies; 83+ messages in thread From: Drew Adams @ 2022-11-15 17:00 UTC (permalink / raw) To: rms@gnu.org, Gregory Heytings; +Cc: emacs-devel@gnu.org > Here's an idea. Type & to do intersection with the following filter, > and type | to do union with the following filter. Both & and | are > undefined in Rmail mode, so they are available for this. They > will be easy to remember, too. FWIW, this is what you can do using Icicles - HTH. The idea is that (1) you can narrow to a subset of the current set of candidates, or (2) if you've narrowed, you can widen to the current set plus new matches against the last set from which you narrowed. IOW, you can widen if you've previously narrowed - otherwise, widening is a no-op, as there's no superset to match against. It works like this: 1. When you complete, the original domain of completion candidates is that used by (passed to) `completing-read' (or similar) - an alist or whatever. 2. During completion you can use a key to narrow or widen the set of candidates. 3. Each time you narrow, a recursive minibuffer is used, completing with the result of narrowing, i.e., completing against the set of matches in the parent minibuffer level. 4. `C-g' pops up one level of minibuffer, i.e., one level of recursion (out of the minibuffer altogether if already at the top-level minibuffer). 5. #4 means you can narrow, do something with some candidates, then `C-g' to remove the last narrowing filter, narrow again with a different filter, etc. 6. When you widen, the current set of candidates is matched against a regexp that's an alternation (\|) of the current match pattern and whatever widening pattern you provide. Instead of entering a recursive minibuffer, you stay at the same level, but with the match-pattern changed to the alternation. Narrowing matches patterns independently - IOW it's orderless. This is possible because it uses a fresh minibuffer with a different set of candidates (those that matched the previous pattern of the new AND). Widening just changes the current match-pattern to an alternation regexp (OR). It doesn't invoke a recursive minibuffer. It's not orderless. ____ `M-*' narrows without completing `S-SPC' narrows and completes `M-+' widens without completing `S-<backspace>' widens and completes `S-TAB' completes (`TAB' does also, but differently) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-12 17:44 ` Andrea Monaco 2022-11-12 18:13 ` Gregory Heytings @ 2022-11-14 3:13 ` Richard Stallman 2022-11-15 9:35 ` Gregory Heytings 1 sibling, 1 reply; 83+ messages in thread From: Richard Stallman @ 2022-11-14 3:13 UTC (permalink / raw) To: Andrea Monaco; +Cc: emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > I just tried Rmail, again I had a very positive impression, and > > again I regret that it works only with mbox files and not with > > Maildirs. I can imagine various possible meanings for those words. What exactly is the feature that you propose to implement in Rmail? > I don't think that's too hard to implement, maybe I'll take a look. Depending on the meaning, it might require a total rewrite. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-14 3:13 ` Richard Stallman @ 2022-11-15 9:35 ` Gregory Heytings 2022-11-16 3:15 ` Richard Stallman 0 siblings, 1 reply; 83+ messages in thread From: Gregory Heytings @ 2022-11-15 9:35 UTC (permalink / raw) To: Richard Stallman; +Cc: Andrea Monaco, emacs-devel >> I just tried Rmail, again I had a very positive impression, and again I >> regret that it works only with mbox files and not with Maildirs. > > I can imagine various possible meanings for those words. What exactly is > the feature that you propose to implement in Rmail? > Currently Rmail only works with mbox files: each mail folder is a single file, in which all mails are placed one after the other. As you probably know, Maildirs were proposed about 25 years ago to address the limitations of mbox files, and in particular to remove the need of a locking mechanism when the mail folder is accessed concurrently by two programs (e.g. the mail delivery agent and the mail user agent). With Maildirs, which are now the standard way to store mails, each mail folder is a directory, in which each individual mail is stored in its own file. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-15 9:35 ` Gregory Heytings @ 2022-11-16 3:15 ` Richard Stallman 2022-11-19 14:47 ` Gregory Heytings 0 siblings, 1 reply; 83+ messages in thread From: Richard Stallman @ 2022-11-16 3:15 UTC (permalink / raw) To: Gregory Heytings; +Cc: andrea.monaco, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > As you probably > know, Maildirs were proposed about 25 years ago to address the limitations > of mbox files, I don't consider mbox files limited. Why do you think so? > in particular to remove the need of a locking mechanism > when the mail folder is accessed concurrently by two programs (e.g. the > mail delivery agent and the mail user agent). This is a complication in the design; but given that we implemented this interlocking already (in the 1980s). in practice it is not a limitation any more. > With Maildirs, which are > now the standard way to store mails, each mail folder is a directory, in > which each individual mail is stored in its own file. I'm concerned that this will make Rmail files bigger and make Rmail slower. My RMAIL file contains 5000 messages and is 286987559 bytes long. Rmauk can read it and parse it in 3 seconds or so. This is on a Thinkpad x200, which is slow by current standards, How long would it take to read and digest a Maildir on this machine? Would it have to read each message when it starts up? Or else, would making a summary or searching thru messages have to read each message? If you tell me about a mail user agent that uses Maildirs, and how I could read my RMAIL file into one without changing anything, then if that mail user agent is packaged in Trisquel, I could use it to estimate what the speed of Rmail would be. How would Rmail manage memory if these 5000 messages were in a Maildir? Would it keep only the current message in memory? Would it generate 5000 buffers at startup, once for each message? -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-16 3:15 ` Richard Stallman @ 2022-11-19 14:47 ` Gregory Heytings 2022-11-20 17:37 ` Richard Stallman 0 siblings, 1 reply; 83+ messages in thread From: Gregory Heytings @ 2022-11-19 14:47 UTC (permalink / raw) To: Richard Stallman; +Cc: andrea.monaco, emacs-devel >> As you probably know, Maildirs were proposed about 25 years ago to >> address the limitations of mbox files, > > I don't consider mbox files limited. Why do you think so? > My opinions are not important, facts are. The fact is that: 1. Mbox files do not scale. It is not uncommon to have mail folders that are several Gb large, and opening a 50 Kb email in say a 2 Gb folder means reading the whole 2 Gb file. 2. Mbox files are fragile. If for whatever reason a program crashes while updating an mbox file, the whole mbox file can be corrupted, or even lost. 3. Mbox files are slow. For example, when an email in the middle of a mail folder is deleted, or moved to another mail folder, the whole mbox file must be written again. 4. Mbox files cannot be accessed concurrently by two programs, e.g. the mail delivery agent and the mail user agent, or two mail user agents. In practice most people access their mail with several mail user agents, e.g. on laptop computer, a desktop computer, a tablet and/or a mobile phone. Another common pattern is two or more people using a shared mail folder, e.g. for the "contact" email address of a company. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-19 14:47 ` Gregory Heytings @ 2022-11-20 17:37 ` Richard Stallman 2022-11-20 19:36 ` Gregory Heytings 2022-11-23 20:57 ` chad 0 siblings, 2 replies; 83+ messages in thread From: Richard Stallman @ 2022-11-20 17:37 UTC (permalink / raw) To: Gregory Heytings; +Cc: andrea.monaco, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > 1. Mbox files do not scale. It is not uncommon to have mail folders that > are several Gb large, and opening a 50 Kb email in say a 2 Gb folder means > reading the whole 2 Gb file. Even my RMAIL file is not a whole GB in size. How does a mail agent find a specific message in a maildir? Does it have to read thousands of files one by one? > 2. Mbox files are fragile. If for whatever reason a program crashes while > updating an mbox file, the whole mbox file can be corrupted, or even lost. Rmail does not have that problem. Emacs writes the new file under another name, then renames it into place. That is atomic. > 3. Mbox files are slow. For example, when an email in the middle of a > mail folder is deleted, or moved to another mail folder, the whole mbox > file must be written again. Rmail does not try to save the mbox every time you change it. It saves when you say to save. For my 300 meg Rmail file, that is not painful. > 4. Mbox files cannot be accessed concurrently by two programs, e.g. the > mail delivery agent and the mail user agent, or two mail user agents. That is the case for the incoming mbox. We have interlocking for that. Also, you don't ever leave the mail in the incoming mbox. You copy it into the RMAIL file. What it comes down to is that your mail user agant is designed to be convenient and easy with maildirs, and Rmail is designed to be convenient and easy with mboxes. If you suppose that Rmail works like a user agent that was designed for maildirs, you will expect some operations to be problematical, which in fact are not. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-20 17:37 ` Richard Stallman @ 2022-11-20 19:36 ` Gregory Heytings 2022-11-22 12:14 ` Richard Stallman 2022-11-23 20:57 ` chad 1 sibling, 1 reply; 83+ messages in thread From: Gregory Heytings @ 2022-11-20 19:36 UTC (permalink / raw) To: Richard Stallman; +Cc: andrea.monaco, emacs-devel > > What it comes down to is that your mail user agant is designed to be > convenient and easy with maildirs, and Rmail is designed to be > convenient and easy with mboxes. If you suppose that Rmail works like a > user agent that was designed for maildirs, you will expect some > operations to be problematical, which in fact are not. > I think we are miscommunicating. I'm not supposing anything about mail user agents. I'm just trying to explain why mbox files are incompatible with the way most people deal with their mails nowadays. It's not without reason that Maildirs have replaced mboxes (and IMAP has replaced POP). I understand that the limitations of mbox files are apparently not a problem for you personally. More generally, I'm trying to explain why adding a support for Maildirs to Rmail might increase its adoption. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-20 19:36 ` Gregory Heytings @ 2022-11-22 12:14 ` Richard Stallman 2022-11-22 12:58 ` Gregory Heytings 0 siblings, 1 reply; 83+ messages in thread From: Richard Stallman @ 2022-11-22 12:14 UTC (permalink / raw) To: Gregory Heytings; +Cc: andrea.monaco, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I'm just trying to explain why mbox files are incompatible with the way > most people deal with their mails nowadays. The situation looks symmetrical to me. I fear that maildirs are incompatible with the way I use email. I really am intrerested in the answers to the questions I asked about slownesses that might -- or might not -- be a problem for use of maildirs. If they are not in fact a problem, I'd like to know that. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-22 12:14 ` Richard Stallman @ 2022-11-22 12:58 ` Gregory Heytings 2022-11-28 21:38 ` Richard Stallman 0 siblings, 1 reply; 83+ messages in thread From: Gregory Heytings @ 2022-11-22 12:58 UTC (permalink / raw) To: Richard Stallman; +Cc: andrea.monaco, emacs-devel >> I'm just trying to explain why mbox files are incompatible with the way >> most people deal with their mails nowadays. > > The situation looks symmetrical to me. > > I fear that maildirs are incompatible with the way I use email. > > I really am intrerested in the answers to the questions I asked about > slownesses that might -- or might not -- be a problem for use of > maildirs. If they are not in fact a problem, I'd like to know that. > They are not a problem. Mail user agents which support Maildirs index the individual mails in a database, either an (small) index of the headers or a (larger) "full text" index. With such an index even opening a folder with tens of thousands of messages only takes a fraction of a second. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-22 12:58 ` Gregory Heytings @ 2022-11-28 21:38 ` Richard Stallman 0 siblings, 0 replies; 83+ messages in thread From: Richard Stallman @ 2022-11-28 21:38 UTC (permalink / raw) To: Gregory Heytings; +Cc: andrea.monaco, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > They are not a problem. Mail user agents which support Maildirs index the > individual mails in a database, either an (small) index of the headers or > a (larger) "full text" index. With such an index even opening a folder > with tens of thousands of messages only takes a fraction of a second. Thanks. It seems to be a good solution as long as the mail agent knows how to recalculate the database when the directory has changed. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-20 17:37 ` Richard Stallman 2022-11-20 19:36 ` Gregory Heytings @ 2022-11-23 20:57 ` chad 2022-11-24 6:39 ` Eli Zaretskii 2022-11-26 0:51 ` Richard Stallman 1 sibling, 2 replies; 83+ messages in thread From: chad @ 2022-11-23 20:57 UTC (permalink / raw) To: rms; +Cc: Gregory Heytings, andrea.monaco, emacs-devel [-- Attachment #1: Type: text/plain, Size: 814 bytes --] FWIW, many years ago, I had to switch from RMAIL to mh due to some of the factors Gregory mentioned, especially infrequent but troublesome corrupted rmail files and problems with multiple concurrent clients. These problems are rare when users only use a single device to read from local storage, but even 25 years ago I was using multiple geographically separated computers and shared networked storage. RMAIL also suffered, performance-wise, as email volume increased. Certainly, some of these problems were more due to movemail than BABYL. That said, I think the existence of very old email clients such as nmh (and mh-e) and alpine/mutt and newer clients such as notmuch and mu/m4e provide enough alternatives to rmail that (I suppose) the interest in an updated rmail is very small. I hope that helps, ~Chad [-- Attachment #2: Type: text/html, Size: 896 bytes --] ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-23 20:57 ` chad @ 2022-11-24 6:39 ` Eli Zaretskii 2022-11-28 21:38 ` Richard Stallman 2022-11-26 0:51 ` Richard Stallman 1 sibling, 1 reply; 83+ messages in thread From: Eli Zaretskii @ 2022-11-24 6:39 UTC (permalink / raw) To: chad; +Cc: rms, gregory, andrea.monaco, emacs-devel > From: chad <yandros@gmail.com> > Date: Wed, 23 Nov 2022 15:57:39 -0500 > Cc: Gregory Heytings <gregory@heytings.org>, andrea.monaco@autistici.org, > emacs-devel@gnu.org > > FWIW, many years ago, I had to switch from RMAIL to mh due to some of the factors Gregory mentioned, > especially infrequent but troublesome corrupted rmail files and problems with multiple concurrent clients. > These problems are rare when users only use a single device to read from local storage, but even 25 years > ago I was using multiple geographically separated computers and shared networked storage. RMAIL also > suffered, performance-wise, as email volume increased. Certainly, some of these problems were more due > to movemail than BABYL. Rmail's treatment of mbox files and the way it stores processed email have been completely redesigned and reimplemented since the time you used it. In particular, Rmail no longer uses BABYL format, and doesn't rewrite the incoming mbox stuff at all, but just processes it in-place using buffer-swap-text. The move to Unicode in Emacs and years of cleaning up the code which encodes/decodes non-ASCII also contributed to solving many problems. So now Rmail has none of the problems that probably caused you to switch from Rmail. I use it every day, including to read and reply to this email. > That said, I think the existence of very old email clients such as nmh (and mh-e) and alpine/mutt and newer > clients such as notmuch and mu/m4e provide enough alternatives to rmail that (I suppose) the interest in an > updated rmail is very small. I don't have objections to adding maildir support to Rmail, I just don't quite see how that could be done without coding a complete new backend, or even redesigning (again) how Rmail processes and presents email. The backbone of Rmail is a single mbox-formatted buffer which Rmail narrows to a message it displays, and whose text it swaps with the display buffer using buffer-swap-text, or reshuffles when some sorting is required, or searches through when the user issues an Rmail search command. To use maildir without changing this basic design, Someone would have to find a way of presenting multiple files in multiple directories as a single large buffer. That should be possible, but the naïve ways of doing so will probably be kludgey and unclean, let alone inefficient. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-24 6:39 ` Eli Zaretskii @ 2022-11-28 21:38 ` Richard Stallman 0 siblings, 0 replies; 83+ messages in thread From: Richard Stallman @ 2022-11-28 21:38 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I don't have objections to adding maildir support to Rmail, I just don't > quite see how that could be done without coding a complete new backend, or > even redesigning (again) how Rmail processes and presents email. That is my opinion too. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-23 20:57 ` chad 2022-11-24 6:39 ` Eli Zaretskii @ 2022-11-26 0:51 ` Richard Stallman 1 sibling, 0 replies; 83+ messages in thread From: Richard Stallman @ 2022-11-26 0:51 UTC (permalink / raw) To: chad; +Cc: gregory, andrea.monaco, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > FWIW, many years ago, I had to switch from RMAIL to mh due to some of the > factors Gregory mentioned, especially infrequent but troublesome corrupted > rmail files and problems with multiple concurrent clients. These problems > are rare when users only use a single device to read from local storage, It seems there are real users whose use of Rmail would not be with a single device, reading from local storage. I have to believe it, but I am surprised becaause I don't see how that would happen. Would you like to tell me the scenarios of usage that you were using? Emacs always reads or writes the entire file, and does it in a way designed to avoid any chance of half-written files. Also, it has interlocking for writing a file from multiple Emacses. That applies to all files, not just Rmail flles. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* RE: [External] : Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 18:00 ` Gregory Heytings 2022-11-11 18:19 ` Eli Zaretskii @ 2022-11-11 18:22 ` Drew Adams 1 sibling, 0 replies; 83+ messages in thread From: Drew Adams @ 2022-11-11 18:22 UTC (permalink / raw) To: Gregory Heytings, Eli Zaretskii Cc: rms@gnu.org, andrea.monaco@autistici.org, rpluim@gmail.com, emacs-devel@gnu.org > I think there are two possibilities when adding another filter: either > broadening the already existing filtering ("union" in mathematical terms) > or narrowing the already existing filtering ("intersection" in > mathematical terms). I didn't realize that's what this is about. If so, it's not "filtering". Filtering _subtracts_ from the input set - it filters out zero or more members. Filtering can't _add_ to the input set. A filter is a sieve: "a device that removes something from whatever passes through it". https://www.wordwebonline.com/search.pl?w=filter If you have an operation that starts with a (possibly empty) set and lets you add to it, that can't reasonably be called "filtering". For what I think you're describing, I use the verbs "narrow" (for filtering - set intersection) and "widen" (for set union). In terms of predicates / Boolean, it's AND (multiplication) and OR (addition), respectively. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-11 8:06 ` Eli Zaretskii 2022-11-11 14:59 ` Juanma Barranquero 2022-11-11 18:00 ` Gregory Heytings @ 2022-11-12 3:35 ` Richard Stallman 2022-11-12 7:47 ` Eli Zaretskii 2 siblings, 1 reply; 83+ messages in thread From: Richard Stallman @ 2022-11-12 3:35 UTC (permalink / raw) To: Eli Zaretskii; +Cc: andrea.monaco, rpluim, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > That's okay, thanks. But it's only the beginning of my problem. How > do you describe the effect of applying a filter on top of one or more > other filters? Andrea wants to use "intersection", but I tend to > think this is too "mathematical" and too vague to explain clearly what > happens. What would be a good terminology for that? How about "filter further"? "Filter down"> "Filter more strictly"? -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-12 3:35 ` Richard Stallman @ 2022-11-12 7:47 ` Eli Zaretskii 2022-11-14 3:13 ` Richard Stallman 0 siblings, 1 reply; 83+ messages in thread From: Eli Zaretskii @ 2022-11-12 7:47 UTC (permalink / raw) To: rms; +Cc: andrea.monaco, rpluim, emacs-devel > From: Richard Stallman <rms@gnu.org> > Cc: andrea.monaco@autistici.org, rpluim@gmail.com, emacs-devel@gnu.org > Date: Fri, 11 Nov 2022 22:35:54 -0500 > > > That's okay, thanks. But it's only the beginning of my problem. How > > do you describe the effect of applying a filter on top of one or more > > other filters? Andrea wants to use "intersection", but I tend to > > think this is too "mathematical" and too vague to explain clearly what > > happens. What would be a good terminology for that? > > How about "filter further"? "Filter down"> "Filter more strictly"? I have a fundamental problems with using "filtering" in this context. Existing Rmail commands that create summaries don't mention filtering at all. Here's a typical example: rmail-summary-by-topic is an interactive native-compiled Lisp function in ‘rmailsum.el’. (rmail-summary-by-topic SUBJECT &optional WHOLE-MESSAGE) Display a summary of all messages with the given SUBJECT. Normally checks just the Subject field of headers; but with prefix argument WHOLE-MESSAGE is non-nil, looks in the whole message. SUBJECT is a regular expression. So talking about "filtering" in this context will be "out of the blue", unless we also change the doc strings of all rmail-summary-by-* commands and the manual to talk about "filtering". Moreover, "filtering" is somewhat wrong: the messages themselves aren't "filtered": they aren't removed from the inbox. They are just omitted from the produced summary, and commands that move by summary lines skip messages that are not in the summary. So "filtering" here is not real, it's imaginary, and the documentation will need to explain that if we want to use that term. Before we embark on such a massive documentation change, I'd like to try to find a less invasive change of terminology, if that exists. Do you see a way to do that? Basically, what this feature offers is a way to produce a summary from messages that are already "summarized" by some criteria. So I'd prefer that our terminology alluded to this aspect rather than to "filtering", because then it would be natural and won't require significant changes in the documentation of what Rmail summary commands do. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-12 7:47 ` Eli Zaretskii @ 2022-11-14 3:13 ` Richard Stallman 0 siblings, 0 replies; 83+ messages in thread From: Richard Stallman @ 2022-11-14 3:13 UTC (permalink / raw) To: Eli Zaretskii; +Cc: andrea.monaco, rpluim, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Before we embark on such a massive documentation change, I'd like to > try to find a less invasive change of terminology, if that exists. Do > you see a way to do that? I would not object to changing the existing Rmail partial-summary commands to use the term "filtered" if that makes the whole of Rmail summaries clearer. > Anyway, unless I misunderstand something, the "summary" in Rmail is called > the message "index" or "list" by other MUAs. "List" in the context of Emacs will tend to cause confusion. "Index" might be ok to switch to. Does anyone see a possible confusion in use of "index" here? > How about "progressive summary"? or maybe "progressively narrowing > summary"? If it is ok to use the term "narrowing" for this. "progressively narrowing" would make sense. It could also be "progressive filtering". > Is "limit" perhaps a > better word? I think "limit" is not helpful here. That's because "progressively limiting" is not a clear way to decribe this. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v3] Allow applying filters to summary consecutively 2022-11-07 14:13 ` Andrea Monaco 2022-11-08 5:02 ` Richard Stallman 2022-11-10 4:04 ` Richard Stallman @ 2022-11-17 13:34 ` Eli Zaretskii 2 siblings, 0 replies; 83+ messages in thread From: Eli Zaretskii @ 2022-11-17 13:34 UTC (permalink / raw) To: Andrea Monaco; +Cc: rms, rpluim, emacs-devel > From: Andrea Monaco <andrea.monaco@autistici.org> > Cc: rms@gnu.org, rpluim@gmail.com, emacs-devel@gnu.org > Date: Mon, 07 Nov 2022 15:13:13 +0100 > > > The words "negate" and "intersect" come from logic and mathematics. > They might not be especially common, but they are very precise. So I > kept them and expanded on their meaning in the rest of the docstrings. Thanks. I eventually went with "invert" instead of "negate", and with rmail-summary-progressively-narrow instead of rmail-summary-apply-filters-consecutively. Please in the future provide ChangeLog-style commit log message for the changes. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH v2] Allow applying filters to summary consecutively (was: Summary by thread in rmail) 2022-10-11 7:16 ` [PATCH v2] " Andrea Monaco 2022-10-11 8:13 ` [PATCH v2] Allow applying filters to summary consecutively Robert Pluim @ 2022-10-27 13:58 ` Eli Zaretskii 1 sibling, 0 replies; 83+ messages in thread From: Eli Zaretskii @ 2022-10-27 13:58 UTC (permalink / raw) To: Andrea Monaco; +Cc: emacs-devel, rms > From: Andrea Monaco <andrea.monaco@autistici.org> > Cc: emacs-devel@gnu.org, rms@gnu.org > Date: Tue, 11 Oct 2022 09:16:52 +0200 > > > rmail-summary-by-recipients and rmail-summary-by-topic already use the > prefix argument for every non-nil value, so I don't know how to proceed. > I applied all other changes. Thanks, I installed this. Please in the future accompany the patches with a ChangeLog-style commit log message. You can find the details in the CONTRIBUTE file in the Emacs Git repository. ^ permalink raw reply [flat|nested] 83+ messages in thread
* Re: [PATCH] Allow applying filters to summary consecutively (was: Summary by thread in rmail) 2022-10-09 20:33 ` [PATCH] Allow applying filters to summary consecutively (was: Summary by thread in rmail) Andrea Monaco 2022-10-10 7:31 ` Eli Zaretskii @ 2022-10-10 22:03 ` Richard Stallman 1 sibling, 0 replies; 83+ messages in thread From: Richard Stallman @ 2022-10-10 22:03 UTC (permalink / raw) To: Andrea Monaco; +Cc: emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > This patch adds optional argument keep-filtering to rmail-summary-by-* > commands. When t, the filter works on the currently displayed summary. > I also wrote a command rmail-summary-negate to invert the current > selection of displayed messages. Thank you! -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 83+ messages in thread
end of thread, other threads:[~2022-11-28 21:38 UTC | newest] Thread overview: 83+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-10-05 18:31 Summary by thread in rmail Andrea Monaco 2022-10-05 18:49 ` Eli Zaretskii 2022-10-05 23:40 ` Emanuel Berg 2022-10-06 22:04 ` Richard Stallman 2022-10-07 10:17 ` Andrea Monaco 2022-10-07 11:24 ` Emanuel Berg 2022-10-09 20:33 ` [PATCH] Allow applying filters to summary consecutively (was: Summary by thread in rmail) Andrea Monaco 2022-10-10 7:31 ` Eli Zaretskii 2022-10-10 8:38 ` Andrea Monaco 2022-10-10 8:57 ` Eli Zaretskii 2022-10-11 7:16 ` [PATCH v2] " Andrea Monaco 2022-10-11 8:13 ` [PATCH v2] Allow applying filters to summary consecutively Robert Pluim 2022-10-12 9:35 ` Andrea Monaco 2022-10-12 11:03 ` Robert Pluim 2022-10-12 12:56 ` Eli Zaretskii 2022-10-12 18:13 ` Andrea Monaco 2022-10-12 18:22 ` Eli Zaretskii 2022-10-12 22:02 ` Richard Stallman 2022-10-19 14:23 ` [PATCH v3] " Andrea Monaco 2022-10-19 14:55 ` Robert Pluim 2022-10-20 15:45 ` Andrea Monaco 2022-10-20 16:02 ` Robert Pluim 2022-10-20 19:00 ` Andrea Monaco 2022-10-21 19:42 ` Richard Stallman 2022-10-21 19:38 ` Richard Stallman 2022-10-27 14:27 ` Eli Zaretskii 2022-10-27 15:22 ` Andrea Monaco 2022-10-28 13:26 ` Andrea Monaco 2022-11-06 7:34 ` Eli Zaretskii 2022-11-07 14:13 ` Andrea Monaco 2022-11-08 5:02 ` Richard Stallman 2022-11-08 8:04 ` Andrea Monaco 2022-11-14 3:13 ` Richard Stallman 2022-11-10 4:04 ` Richard Stallman 2022-11-10 8:06 ` Eli Zaretskii 2022-11-10 8:53 ` Robert Pluim 2022-11-11 4:36 ` Richard Stallman 2022-11-11 8:06 ` Eli Zaretskii 2022-11-11 14:59 ` Juanma Barranquero 2022-11-11 17:23 ` Eli Zaretskii 2022-11-11 17:32 ` [External] : " Drew Adams 2022-11-11 18:00 ` Gregory Heytings 2022-11-11 18:19 ` Eli Zaretskii 2022-11-11 18:52 ` Gregory Heytings 2022-11-11 18:54 ` Gregory Heytings 2022-11-11 19:34 ` Eli Zaretskii 2022-11-11 19:33 ` Eli Zaretskii 2022-11-11 20:50 ` Gregory Heytings 2022-11-12 3:37 ` Richard Stallman 2022-11-12 7:52 ` Eli Zaretskii 2022-11-12 6:57 ` Eli Zaretskii 2022-11-12 16:30 ` Gregory Heytings 2022-11-12 17:44 ` Andrea Monaco 2022-11-12 18:13 ` Gregory Heytings 2022-11-14 3:13 ` Richard Stallman 2022-11-14 8:39 ` Gregory Heytings 2022-11-15 4:18 ` Richard Stallman 2022-11-15 9:56 ` Gregory Heytings 2022-11-16 3:15 ` Richard Stallman 2022-11-16 3:15 ` Richard Stallman 2022-11-24 18:25 ` Andrea Monaco 2022-11-28 21:38 ` Richard Stallman 2022-11-15 17:00 ` [External] : " Drew Adams 2022-11-14 3:13 ` Richard Stallman 2022-11-15 9:35 ` Gregory Heytings 2022-11-16 3:15 ` Richard Stallman 2022-11-19 14:47 ` Gregory Heytings 2022-11-20 17:37 ` Richard Stallman 2022-11-20 19:36 ` Gregory Heytings 2022-11-22 12:14 ` Richard Stallman 2022-11-22 12:58 ` Gregory Heytings 2022-11-28 21:38 ` Richard Stallman 2022-11-23 20:57 ` chad 2022-11-24 6:39 ` Eli Zaretskii 2022-11-28 21:38 ` Richard Stallman 2022-11-26 0:51 ` Richard Stallman 2022-11-11 18:22 ` [External] : " Drew Adams 2022-11-12 3:35 ` Richard Stallman 2022-11-12 7:47 ` Eli Zaretskii 2022-11-14 3:13 ` Richard Stallman 2022-11-17 13:34 ` Eli Zaretskii 2022-10-27 13:58 ` [PATCH v2] Allow applying filters to summary consecutively (was: Summary by thread in rmail) Eli Zaretskii 2022-10-10 22:03 ` [PATCH] " Richard Stallman
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).