diff options
| author | Dirk-Jan C. Binnema <djcb@djcbsoftware.nl> | 2025-06-28 12:21:19 +0300 |
|---|---|---|
| committer | Dirk-Jan C. Binnema <djcb@djcbsoftware.nl> | 2025-06-30 21:57:29 +0300 |
| commit | f2699a4b95ffd38f3eeb24a454450e0f42f5eead (patch) | |
| tree | f30c517c86bc82648850c731fb9b8c7dfbe2e0c3 /scm | |
| parent | cc39c9cae6685b22cb19781604c5a71f18548f4b (diff) | |
mu-scm: add support for thread-id
Code + doc + test
Diffstat (limited to 'scm')
| -rw-r--r-- | scm/mu-scm-test.scm | 17 | ||||
| -rw-r--r-- | scm/mu-scm.scm | 11 | ||||
| -rw-r--r-- | scm/mu-scm.texi | 18 |
3 files changed, 39 insertions, 7 deletions
diff --git a/scm/mu-scm-test.scm b/scm/mu-scm-test.scm index fe59d85..9ae328e 100644 --- a/scm/mu-scm-test.scm +++ b/scm/mu-scm-test.scm @@ -78,13 +78,16 @@ (test-equal '("439C1136.90504@euler.org" "4399DD94.5070309@euler.org" "20051209233303.GA13812@gauss.org" "439B41ED.2080402@euler.org" "439A1E03.3090604@euler.org" "20051211184308.GB13513@gauss.org") - (references msg))) - - (let ((msg (car (mfind "subject:\"gcc include search order\"")))) - (test-equal "gcc include search order" (subject msg)) - (test-equal "klub" (header msg "precedence")) - (test-equal "gcc-help.gcc.gnu.org" (mailing-list msg)) - (test-equal #f (references msg))) + (references msg)) + (test-equal "439C1136.90504@euler.org" (thread-id msg))) + + (let ((msg (car (mfind "subject:\"gcc include search order\"")))) + (test-equal "gcc include search order" (subject msg)) + (test-equal "klub" (header msg "precedence")) + (test-equal "gcc-help.gcc.gnu.org" (mailing-list msg)) + (test-equal #f (references msg)) + (test-equal "3BE9E6535E3029448670913581E7A1A20D852173@emss35m06.us.lmco.com" (message-id msg)) + (test-equal "3BE9E6535E3029448670913581E7A1A20D852173@emss35m06.us.lmco.com" (thread-id msg))) (test-end "test-message-more")) (define (test-options) diff --git a/scm/mu-scm.scm b/scm/mu-scm.scm index 342c25e..32038e4 100644 --- a/scm/mu-scm.scm +++ b/scm/mu-scm.scm @@ -41,6 +41,8 @@ subject references + thread-id + mailing-list language @@ -223,6 +225,15 @@ fake-message-id (see impls) are filtered out. If there are no references, return #f." (find-field message ':references)) +(define-method (thread-id (message <message>)) + "Get the oldest (first) reference for MESSAGE, or message-id if there are none. +If neither are available, return #f. +This is method is useful to determine the thread a message is in." + (let ((refs (references message))) + (if (and refs (not (null? refs))) + (car refs) + (message-id message)))) + (define-method (mailing-list (message <message>)) "Get the mailing-list id for MESSAGE or #f if not available." (find-field message ':list)) diff --git a/scm/mu-scm.texi b/scm/mu-scm.texi index 2b6e0a1..276b122 100644 --- a/scm/mu-scm.texi +++ b/scm/mu-scm.texi @@ -638,6 +638,24 @@ For example: 439A1E03.3090604@@euler.org" "20051211184308.GB13513@@gauss.org") @end lisp +@deffn {Scheme Procedure} thread-id message +@end deffn +Get the oldest reference for the message or its message-id if there is none. +This is useful to identify the thread some message lives in. + +For example: +@lisp +(thread-id msg) +=> "439C1136.90504@@euler.org" +@end lisp + +For example: +@lisp +(references msg) +=> ("439C1136.90504@@euler.org" "4399DD94.5070309@@euler.org" + "20051209233303.GA13812@@gauss.org" "439B41ED.2080402@@euler.org" + 439A1E03.3090604@@euler.org" "20051211184308.GB13513@@gauss.org") +@end lisp @deffn {Scheme Procedure} mailing-list message @end deffn |
