unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#70134: [PATCH] Show all date options when adding Gnus scores interactively
@ 2024-04-01 21:44 Jakub Ječmínek via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-13  7:58 ` Eli Zaretskii
  0 siblings, 1 reply; 6+ messages in thread
From: Jakub Ječmínek via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-04-01 21:44 UTC (permalink / raw)
  To: 70134; +Cc: Eric Abrahamsen, larsi, Alex Bochannek

[-- Attachment #1: Type: text/plain, Size: 1527 bytes --]

Tags: patch


Hello, I'm attaching a patch that enhances user experience when adding
Gnus scores interactively based on date header. This patch does multiple
things:

1. `char-to-type' variable is renamed to `char-to-types' and we allow it
to be mapped to multiple types. This is useful because date header
supports all these types for scoring - '<, '>, 'r, 'after, 'before, 'at
but only the last three were previously offered to the user when using
interactive scoring.

2. `gnus-summary-score-entry' now provides sensible defaults for each
date scoring type - if we're scoring based on integer value ('<, '>) we
offer number of days between now and entry at point (revised version of
what was introduced in bug#61002) and if we're scoring based on string
value ('after, 'before, 'at, 'r) we provide valid date string.

3. If the user scores articles based on date strings ('before, 'after,
'at, 'r), `gnus-summary-score-entry' will no longer cast the type to the
integer type.

4. `gnus-score-date' catches 'r type as well.

I'm also Cc'ing Alex who was the original author of '< '> date scoring
types. Please let me know what you think.


In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.33, cairo version 1.16.0) of 2024-03-23 built on
 kuba-ThinkPad-T14-Gen-3
Repository revision: 7e32e8392ab77f9df08a1f11831cbba2242d721f
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12201001
System Description: Ubuntu 22.04.4 LTS


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Show-all-date-options-when-adding-Gnus-scores-interactively.patch --]
[-- Type: text/patch; name=0001-Show-all-date-options-when-adding-Gnus-scores-interactively.patch, Size: 5434 bytes --]

From 64659d65c3b43960bc0347d5be035ec64779b0ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Je=C4=8Dm=C3=ADnek?= <kuba@kubajecminek.cz>
Date: Sat, 30 Mar 2024 00:34:07 +0100
Subject: [PATCH] Show all date options when adding Gnus scores interactively

* lisp/gnus/gnus-score.el (gnus-summary-increase-score): Rename
'char-to-type' variable to 'char-to-types' and allow multiple types
for each char.

* lisp/gnus/gnus-score.el (gnus-summary-score-entry): Provide better
default values for each scoring type and cast 'match' to number only
if necessary.
---
 lisp/gnus/gnus-score.el | 55 ++++++++++++++++++++---------------------
 1 file changed, 27 insertions(+), 28 deletions(-)

diff --git a/lisp/gnus/gnus-score.el b/lisp/gnus/gnus-score.el
index 479b7496cf1..d7346581f2f 100644
--- a/lisp/gnus/gnus-score.el
+++ b/lisp/gnus/gnus-score.el
@@ -593,18 +593,18 @@ current score file."
 	    (?d "date" nil nil date)
 	    (?f "followup" nil nil string)
 	    (?t "thread" "message-id" nil string)))
-	 (char-to-type
+	 (char-to-types
 	  '((?s s "substring" string)
 	    (?e e "exact string" string)
 	    (?f f "fuzzy string" string)
-	    (?r r "regexp string" string)
+	    (?r r "regexp string" string date)
 	    (?z s "substring" body-string)
 	    (?p r "regexp string" body-string)
 	    (?b before "before date" date)
 	    (?a after "after date" date)
 	    (?n at "this date" date)
-	    (?< < "less than number" number)
-	    (?> > "greater than number" number)
+	    (?< < "less than number" number date)
+	    (?> > "greater than number" number date)
 	    (?= = "equal to number" number)))
 	 (current-score-file gnus-current-score-file)
 	 (char-to-perm
@@ -652,10 +652,9 @@ current score file."
 	  (let ((legal-types
 		 (delq nil
 		       (mapcar (lambda (s)
-				 (if (eq (nth 4 entry)
-					 (nth 3 s))
+				 (if (member (nth 4 entry) (cdddr s))
 				     s nil))
-			       char-to-type))))
+			       char-to-types))))
             (setq header-string
                   (format "%s header `%s' with match type (%s?): "
 			  (if increase "Increase" "Lower")
@@ -875,10 +874,18 @@ If optional argument `EXTRA' is non-nil, it's a non-standard overview header."
   (when (eq type t)
     (setq type 'r))
   ;; Simplify matches...
-  (cond ((or (eq type 'r) (eq type 's) (eq type nil))
+  (cond ((or (and (eq type 'r) (not (string= header "date"))) (eq type 's) (eq type nil))
 	 (setq match (if match (gnus-simplify-subject-re match) "")))
 	((eq type 'f)
-	 (setq match (gnus-simplify-subject-fuzzy match))))
+	 (setq match (gnus-simplify-subject-fuzzy match)))
+        ;; Provide better default values if we're scoring on date header
+        ((string= header "date")
+         (setq match (if (or (eq type '<) (eq type '>))
+                         (format-seconds "%d"
+                                         (time-subtract
+                                          (current-time)
+                                          (gnus-date-get-time match)))
+                       (substring-no-properties (gnus-date-iso8601 match))))))
   (let ((score (gnus-score-delta-default score))
 	(header (downcase header))
 	new)
@@ -893,14 +900,9 @@ If optional argument `EXTRA' is non-nil, it's a non-standard overview header."
 				 (t "permanent"))
 			   header
 			   (if (< score 0) "lower" "raise"))
-                   (cond ((numberp match) (int-to-string match))
-                         ((string= header "date")
-                          (int-to-string
-                           (-
-                            (/ (car (time-convert (current-time) 1)) 86400)
-                            (/ (car (time-convert (gnus-date-get-time match) 1))
-                               86400))))
-                         (t match)))))
+		   (if (numberp match)
+		       (int-to-string match)
+		     match))))
 
     ;; If this is an integer comparison, we transform from string to int.
     (if (eq (nth 2 (assoc header gnus-header-index)) 'gnus-score-integer)
@@ -909,16 +911,13 @@ If optional argument `EXTRA' is non-nil, it's a non-standard overview header."
       (set-text-properties 0 (length match) nil match))
 
     ;; Modify match and type for article age scoring.
-    (if (string= "date" (nth 0 (assoc header gnus-header-index)))
-	(let ((age (string-to-number match)))
-	  (if (or (< age 0)
-		  (string= "0" match))
-	      (user-error "Article age must be a positive number"))
-	  (setq match age
-		type (cond ((eq type 'after)
-			    '<)
-			   ((eq type 'before)
-			    '>)))))
+    (when (and (string= "date" (nth 0 (assoc header gnus-header-index)))
+               (or (eq type '<) (eq type '>)))
+      (let ((age (string-to-number match)))
+        (if (or (< age 0)
+                (string= "0" match))
+            (user-error "Article age must be a positive number"))
+        (setq match age)))
 
     (unless (eq date 'now)
       ;; Add the score entry to the score file.
@@ -1806,7 +1805,7 @@ score in `gnus-newsgroup-scored' by SCORE."
 	   ((eq type 'at)
 	    (setq match-func 'string=
 		  match (gnus-date-iso8601 (nth 0 kill))))
-	   ((eq type 'regexp)
+	   ((or (eq type 'regexp) (eq type 'r))
 	    (setq match-func 'string-match
 		  match (nth 0 kill)))
 	   (t (error "Invalid match type: %s" type)))
-- 
2.39.3 (Apple Git-145)


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* bug#70134: [PATCH] Show all date options when adding Gnus scores interactively
  2024-04-01 21:44 bug#70134: [PATCH] Show all date options when adding Gnus scores interactively Jakub Ječmínek via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-04-13  7:58 ` Eli Zaretskii
  2024-04-22  3:33   ` Eric Abrahamsen
  0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2024-04-13  7:58 UTC (permalink / raw)
  To: eric, Jakub Ječmínek; +Cc: 70134, larsi, alex

Ping!  Eric, any comments?

> Cc: Eric Abrahamsen <eric@ericabrahamsen.net>, larsi@gnus.org,
>  Alex Bochannek <alex@bochannek.com>
> Date: Mon, 01 Apr 2024 21:44:04 +0000
> From:  Jakub Ječmínek via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
> 
> Hello, I'm attaching a patch that enhances user experience when adding
> Gnus scores interactively based on date header. This patch does multiple
> things:
> 
> 1. `char-to-type' variable is renamed to `char-to-types' and we allow it
> to be mapped to multiple types. This is useful because date header
> supports all these types for scoring - '<, '>, 'r, 'after, 'before, 'at
> but only the last three were previously offered to the user when using
> interactive scoring.
> 
> 2. `gnus-summary-score-entry' now provides sensible defaults for each
> date scoring type - if we're scoring based on integer value ('<, '>) we
> offer number of days between now and entry at point (revised version of
> what was introduced in bug#61002) and if we're scoring based on string
> value ('after, 'before, 'at, 'r) we provide valid date string.
> 
> 3. If the user scores articles based on date strings ('before, 'after,
> 'at, 'r), `gnus-summary-score-entry' will no longer cast the type to the
> integer type.
> 
> 4. `gnus-score-date' catches 'r type as well.
> 
> I'm also Cc'ing Alex who was the original author of '< '> date scoring
> types. Please let me know what you think.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#70134: [PATCH] Show all date options when adding Gnus scores interactively
  2024-04-13  7:58 ` Eli Zaretskii
@ 2024-04-22  3:33   ` Eric Abrahamsen
  2024-04-24 22:52     ` Richard Stallman
  0 siblings, 1 reply; 6+ messages in thread
From: Eric Abrahamsen @ 2024-04-22  3:33 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 70134, Jakub Ječmínek, larsi, alex

Eli Zaretskii <eliz@gnu.org> writes:

> Ping!  Eric, any comments?

I have no comments! I don't know the scoring code, and fifteen minutes
of looking at the patch and its surroundings has left me none the wiser.
I don't know what it means to add multiple types to each char; I don't
know what a "type" is in this context. Jakub, do you think you could
enlighten me within a short paragraph or so? I'm also okay with just
chucking it in, and letting people in gnus.general know that things have
changed. There are a few hardcore scoring users there.

Thanks,
Eric





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#70134: [PATCH] Show all date options when adding Gnus scores interactively
  2024-04-22  3:33   ` Eric Abrahamsen
@ 2024-04-24 22:52     ` Richard Stallman
  2024-04-24 23:08       ` Alex Bochannek
  0 siblings, 1 reply; 6+ messages in thread
From: Richard Stallman @ 2024-04-24 22:52 UTC (permalink / raw)
  To: Eric Abrahamsen; +Cc: 70134, kuba, eliz, larsi, alex

[[[ 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 have no comments! I don't know the scoring code, and fifteen minutes
  > of looking at the patch and its surroundings has left me none the wiser.

This suggests to me that that code may need better comments to explain
its overall structure.  Do you think so?

-- 
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] 6+ messages in thread

* bug#70134: [PATCH] Show all date options when adding Gnus scores interactively
  2024-04-24 22:52     ` Richard Stallman
@ 2024-04-24 23:08       ` Alex Bochannek
  2024-05-01 19:27         ` Jakub Ječmínek via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 6+ messages in thread
From: Alex Bochannek @ 2024-04-24 23:08 UTC (permalink / raw)
  To: Richard Stallman; +Cc: Eric Abrahamsen, 70134, eliz, larsi, kuba

Richard Stallman <rms@gnu.org> writes:

> [[[ 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 have no comments! I don't know the scoring code, and fifteen minutes
>   > of looking at the patch and its surroundings has left me none the wiser.
>
> This suggests to me that that code may need better comments to explain
> its overall structure.  Do you think so?

As Jakub mentioned, I am the author of that part of the Gnus scoring
code. I have not had a chance to look at the proposed patch, but I agree
that some explanations would be useful. I can look it over this weekend.

-- 
Alex.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#70134: [PATCH] Show all date options when adding Gnus scores interactively
  2024-04-24 23:08       ` Alex Bochannek
@ 2024-05-01 19:27         ` Jakub Ječmínek via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 6+ messages in thread
From: Jakub Ječmínek via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-01 19:27 UTC (permalink / raw)
  To: Alex Bochannek; +Cc: Eric Abrahamsen, 70134, eliz, larsi, Richard Stallman


"Eric Abrahamsen" <eric@ericabrahamsen.net> writes:
> I have no comments! I don't know the scoring code, and fifteen minutes
> of looking at the patch and its surroundings has left me none the wiser.
> I don't know what it means to add multiple types to each char; I don't
> know what a "type" is in this context. Jakub, do you think you could
> enlighten me within a short paragraph or so? I'm also okay with just
> chucking it in, and letting people in gnus.general know that things have
> changed. There are a few hardcore scoring users there.

Sure, please let me know if need more context.

If you hit 'I' or 'L' on any article (in the Summary buffer) then Gnus
will walk you through the scoring process. Gnus first asks you which
header you're scoring on and presents you a bunch of characters (each
character represents one header: d - date, b - body, etc.). If you
choose date, for example, then Gnus asks you for 'match type' which is
basically a handler which will decide whether to lower/increase the
score. Which scoring types are presented depends on which header you're
scoring on but current implementation allows to bind only one character
to one type. But since Alex implemented integer scoring (currently bound
to `number' type) to date, I think we should extend it and present this
option to the user.


"Alex Bochannek" <alex@bochannek.com> writes:
> As Jakub mentioned, I am the author of that part of the Gnus scoring
> code. I have not had a chance to look at the proposed patch, but I agree
> that some explanations would be useful. I can look it over this weekend.

Thank you, your review is appreciated. Please do you happen to remember
why you used this form

(string= "date" (nth 0 (assoc header gnus-header-index)))

instead of this

(string= header "date")


Thanks!

Best

-- 
Kuba Ječmínek (http://kubajecminek.cz)






^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-05-01 19:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-01 21:44 bug#70134: [PATCH] Show all date options when adding Gnus scores interactively Jakub Ječmínek via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-13  7:58 ` Eli Zaretskii
2024-04-22  3:33   ` Eric Abrahamsen
2024-04-24 22:52     ` Richard Stallman
2024-04-24 23:08       ` Alex Bochannek
2024-05-01 19:27         ` Jakub Ječmínek via Bug reports for GNU Emacs, the Swiss army knife of text editors

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).