* [PATCH 1/5] make headers locally expandable/collapsable
@ 2009-11-24 7:45 Alexander Botero-Lowry
2009-11-24 7:45 ` [PATCH 2/5] cleanup a lot of left-overs from the global invis Alexander Botero-Lowry
2009-11-24 19:40 ` [PATCH 1/5] make headers locally expandable/collapsable Carl Worth
0 siblings, 2 replies; 8+ messages in thread
From: Alexander Botero-Lowry @ 2009-11-24 7:45 UTC (permalink / raw)
To: notmuch
---
notmuch.el | 18 +++++++++++++++---
1 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/notmuch.el b/notmuch.el
index fa6e7de..8aee286 100644
--- a/notmuch.el
+++ b/notmuch.el
@@ -605,7 +605,8 @@ which this thread was originally shown."
(end-of-line)
; Inverse video for subject
(overlay-put (make-overlay beg (point)) 'face '(:inverse-video t))
- (forward-line 2)
+ (forward-line 1)
+ (end-of-line)
(let ((beg-hidden (point-marker)))
(re-search-forward notmuch-show-header-end-regexp)
(beginning-of-line)
@@ -619,8 +620,19 @@ which this thread was originally shown."
(forward-line)
)
(indent-rigidly beg end depth)
- (overlay-put (make-overlay beg-hidden end)
- 'invisible 'notmuch-show-header)
+ (let ((invis-spec (make-symbol "notmuch-show-header")))
+ (add-to-invisibility-spec (cons invis-spec t))
+ (overlay-put (make-overlay beg-hidden end)
+ 'invisible invis-spec)
+ (goto-char beg)
+ (forward-line)
+ (let ((header-button (make-button (line-beginning-position) (line-end-position))))
+ (button-put header-button 'invisibility-spec (cons invis-spec t))
+ (button-put header-button 'action 'notmuch-toggle-invisible-action)
+ (button-put header-button 'follow-link t)
+ (button-put header-button 'help-echo
+ "mouse-1, RET: Show headers")
+ ))
(goto-char end)
(insert "\n")
(set-marker beg nil)
--
1.6.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/5] cleanup a lot of left-overs from the global invis
2009-11-24 7:45 [PATCH 1/5] make headers locally expandable/collapsable Alexander Botero-Lowry
@ 2009-11-24 7:45 ` Alexander Botero-Lowry
2009-11-24 7:45 ` [PATCH 3/5] make a nice function for generating invisibility toggle buttons Alexander Botero-Lowry
2009-11-24 19:40 ` [PATCH 1/5] make headers locally expandable/collapsable Carl Worth
1 sibling, 1 reply; 8+ messages in thread
From: Alexander Botero-Lowry @ 2009-11-24 7:45 UTC (permalink / raw)
To: notmuch
---
notmuch.el | 36 ------------------------------------
1 files changed, 0 insertions(+), 36 deletions(-)
diff --git a/notmuch.el b/notmuch.el
index 8aee286..ed1f7cb 100644
--- a/notmuch.el
+++ b/notmuch.el
@@ -62,8 +62,6 @@
(define-key map "a" 'notmuch-show-archive-thread)
(define-key map "A" 'notmuch-show-mark-read-then-archive-thread)
(define-key map "b" 'notmuch-show-toggle-body-read-visible)
- (define-key map "c" 'notmuch-show-toggle-citations-visible)
- (define-key map "h" 'notmuch-show-toggle-headers-visible)
(define-key map "m" 'message-mail)
(define-key map "n" 'notmuch-show-next-message)
(define-key map "N" 'notmuch-show-mark-read-then-next-open-message)
@@ -72,7 +70,6 @@
(define-key map (kbd "C-p") 'notmuch-show-previous-line)
(define-key map "q" 'kill-this-buffer)
(define-key map "r" 'notmuch-show-reply)
- (define-key map "s" 'notmuch-show-toggle-signatures-visible)
(define-key map "v" 'notmuch-show-view-all-mime-parts)
(define-key map "w" 'notmuch-show-view-raw-message)
(define-key map "x" 'kill-this-buffer)
@@ -666,39 +663,6 @@ which this thread was originally shown."
(notmuch-show-markup-message)))
(notmuch-show-hide-markers))
-(defun notmuch-show-toggle-citations-visible ()
- "Toggle visibility of citations"
- (interactive)
- (if notmuch-show-citations-visible
- (add-to-invisibility-spec 'notmuch-show-citation)
- (remove-from-invisibility-spec 'notmuch-show-citation))
- (set 'notmuch-show-citations-visible (not notmuch-show-citations-visible))
- ; Need to force the redisplay for some reason
- (force-window-update)
- (redisplay t))
-
-(defun notmuch-show-toggle-signatures-visible ()
- "Toggle visibility of signatures"
- (interactive)
- (if notmuch-show-signatures-visible
- (add-to-invisibility-spec 'notmuch-show-signature)
- (remove-from-invisibility-spec 'notmuch-show-signature))
- (set 'notmuch-show-signatures-visible (not notmuch-show-signatures-visible))
- ; Need to force the redisplay for some reason
- (force-window-update)
- (redisplay t))
-
-(defun notmuch-show-toggle-headers-visible ()
- "Toggle visibility of header fields"
- (interactive)
- (if notmuch-show-headers-visible
- (add-to-invisibility-spec 'notmuch-show-header)
- (remove-from-invisibility-spec 'notmuch-show-header))
- (set 'notmuch-show-headers-visible (not notmuch-show-headers-visible))
- ; Need to force the redisplay for some reason
- (force-window-update)
- (redisplay t))
-
(defun notmuch-show-toggle-body-read-visible ()
"Toggle visibility of message bodies of read messages"
(interactive)
--
1.6.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/5] make a nice function for generating invisibility toggle buttons
2009-11-24 7:45 ` [PATCH 2/5] cleanup a lot of left-overs from the global invis Alexander Botero-Lowry
@ 2009-11-24 7:45 ` Alexander Botero-Lowry
2009-11-24 7:45 ` [PATCH 4/5] Make bodies locally toggleable Alexander Botero-Lowry
0 siblings, 1 reply; 8+ messages in thread
From: Alexander Botero-Lowry @ 2009-11-24 7:45 UTC (permalink / raw)
To: notmuch
I realized I was replicating this code over and over again, so this
way if I change my mind about something I only have to do it on one
place.
---
notmuch.el | 45 ++++++++++++++++-----------------------------
1 files changed, 16 insertions(+), 29 deletions(-)
diff --git a/notmuch.el b/notmuch.el
index ed1f7cb..23a07cc 100644
--- a/notmuch.el
+++ b/notmuch.el
@@ -497,6 +497,13 @@ which this thread was originally shown."
(force-window-update)
(redisplay t))
+(defun notmuch-configure-invisibility-button (btn invis-spec help-msg)
+ (button-put btn 'invisibility-spec invis-spec)
+ (button-put btn 'action 'notmuch-toggle-invisible-action)
+ (button-put btn 'follow-link t)
+ (button-put btn 'help-echo (concat "mouse-1, RET: " help-msg))
+)
+
(defun notmuch-show-markup-citations-region (beg end depth)
(goto-char beg)
(beginning-of-line)
@@ -512,22 +519,13 @@ which this thread was originally shown."
(invis-spec (make-symbol "notmuch-citation-region")))
(add-to-invisibility-spec invis-spec)
(overlay-put overlay 'invisible invis-spec)
- (let (
- (p (point))
+ (let ((p (point))
(cite-button-text
(concat "[" (number-to-string (count-lines beg-sub (point)))
- "-line citation.]"))
- )
+ "-line citation.]")))
(goto-char (- beg-sub 1))
(insert (concat "\n" indent))
- (let ((cite-button (insert-button cite-button-text)))
- (button-put cite-button 'invisibility-spec invis-spec)
- (button-put cite-button 'action 'notmuch-toggle-invisible-action)
- (button-put cite-button 'follow-link t)
- (button-put cite-button 'help-echo
- "mouse-1, RET: Show citation")
-
- )
+ (notmuch-configure-invisibility-button (insert-button cite-button-text) invis-spec "Show citation")
(insert "\n")
(goto-char (+ (length cite-button-text) p))
))))
@@ -543,16 +541,9 @@ which this thread was originally shown."
(goto-char (- beg-sub 1))
(insert (concat "\n" indent))
- (let ((sig-button (insert-button
- (concat "[" (number-to-string sig-lines)
- "-line signature.]"))))
- (button-put sig-button 'invisibility-spec invis-spec)
- (button-put sig-button 'action
- 'notmuch-toggle-invisible-action)
- (button-put sig-button 'follow-link t)
- (button-put sig-button 'help-echo
- "mouse-1, RET: Show signature")
- )
+ (notmuch-configure-invisibility-button
+ (insert-button (concat "[" (number-to-string sig-lines)
+ "-line signature.]")) invis-spec "Show signature")
(insert "\n")
(goto-char end))))))
(forward-line))))
@@ -623,13 +614,9 @@ which this thread was originally shown."
'invisible invis-spec)
(goto-char beg)
(forward-line)
- (let ((header-button (make-button (line-beginning-position) (line-end-position))))
- (button-put header-button 'invisibility-spec (cons invis-spec t))
- (button-put header-button 'action 'notmuch-toggle-invisible-action)
- (button-put header-button 'follow-link t)
- (button-put header-button 'help-echo
- "mouse-1, RET: Show headers")
- ))
+ (notmuch-configure-invisibility-button
+ (make-button (line-beginning-position) (line-end-position))
+ (cons invis-spec t) "Show headers"))
(goto-char end)
(insert "\n")
(set-marker beg nil)
--
1.6.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/5] Make bodies locally toggleable
2009-11-24 7:45 ` [PATCH 3/5] make a nice function for generating invisibility toggle buttons Alexander Botero-Lowry
@ 2009-11-24 7:45 ` Alexander Botero-Lowry
2009-11-24 7:45 ` [PATCH 5/5] Remove the global expand body keymapping Alexander Botero-Lowry
0 siblings, 1 reply; 8+ messages in thread
From: Alexander Botero-Lowry @ 2009-11-24 7:45 UTC (permalink / raw)
To: notmuch
Having actually implemented this, I realized that my
initial approach of providing a function to configure
a button was wrong. Instead I've replaced that with
button types. This then makes it possible to provide
the fully expanded view when all threads in a message
are unread.
It also has the potential to allow global-expansion functions
if that is desireable
---
notmuch.el | 89 +++++++++++++++++++++++++++++++----------------------------
1 files changed, 47 insertions(+), 42 deletions(-)
diff --git a/notmuch.el b/notmuch.el
index 23a07cc..af0c487 100644
--- a/notmuch.el
+++ b/notmuch.el
@@ -497,12 +497,15 @@ which this thread was originally shown."
(force-window-update)
(redisplay t))
-(defun notmuch-configure-invisibility-button (btn invis-spec help-msg)
- (button-put btn 'invisibility-spec invis-spec)
- (button-put btn 'action 'notmuch-toggle-invisible-action)
- (button-put btn 'follow-link t)
- (button-put btn 'help-echo (concat "mouse-1, RET: " help-msg))
-)
+(define-button-type 'notmuch-button-invisibility-toggle-type 'action 'notmuch-toggle-invisible-action 'follow-link t)
+(define-button-type 'notmuch-button-citation-toggle-type 'help-echo "mouse-1, RET: Show citation"
+ :supertype 'notmuch-button-invisibility-toggle-type)
+(define-button-type 'notmuch-button-signature-toggle-type 'help-echo "mouse-1, RET: Show signature"
+ :supertype 'notmuch-button-invisibility-toggle-type)
+(define-button-type 'notmuch-button-headers-toggle-type 'help-echo "mouse-1, RET: Show headers"
+ :supertype 'notmuch-button-invisibility-toggle-type)
+(define-button-type 'notmuch-button-body-toggle-type 'help-echo "mouse-1, RET: Show message"
+ :supertype 'notmuch-button-invisibility-toggle-type)
(defun notmuch-show-markup-citations-region (beg end depth)
(goto-char beg)
@@ -525,7 +528,9 @@ which this thread was originally shown."
"-line citation.]")))
(goto-char (- beg-sub 1))
(insert (concat "\n" indent))
- (notmuch-configure-invisibility-button (insert-button cite-button-text) invis-spec "Show citation")
+ (insert-button cite-button-text
+ 'invisibility-spec invis-spec
+ :type 'notmuch-button-citation-toggle-type)
(insert "\n")
(goto-char (+ (length cite-button-text) p))
))))
@@ -541,9 +546,11 @@ which this thread was originally shown."
(goto-char (- beg-sub 1))
(insert (concat "\n" indent))
- (notmuch-configure-invisibility-button
- (insert-button (concat "[" (number-to-string sig-lines)
- "-line signature.]")) invis-spec "Show signature")
+ (let ((sig-button-text (concat "[" (number-to-string sig-lines)
+ "-line signature.]")))
+ (insert-button sig-button-text 'invisibility-spec invis-spec
+ :type 'notmuch-button-signature-toggle-type)
+ )
(insert "\n")
(goto-char end))))))
(forward-line))))
@@ -572,16 +579,19 @@ which this thread was originally shown."
(while (< (point) end)
(notmuch-show-markup-part beg end depth))))
-(defun notmuch-show-markup-body (depth)
+(defun notmuch-show-markup-body (depth btn)
(re-search-forward notmuch-show-body-begin-regexp)
(forward-line)
(let ((beg (point-marker)))
(re-search-forward notmuch-show-body-end-regexp)
(let ((end (copy-marker (match-beginning 0))))
(notmuch-show-markup-parts-region beg end depth)
- (if (not (notmuch-show-message-unread-p))
- (overlay-put (make-overlay beg end)
- 'invisible 'notmuch-show-body-read))
+ (let ((invis-spec (make-symbol "notmuch-show-body-read")))
+ (overlay-put (make-overlay beg end)
+ 'invisible invis-spec)
+ (button-put btn 'invisibility-spec invis-spec)
+ (if (not (notmuch-show-message-unread-p))
+ (add-to-invisibility-spec invis-spec)))
(set-marker beg nil)
(set-marker end nil)
)))
@@ -589,10 +599,12 @@ which this thread was originally shown."
(defun notmuch-show-markup-header (depth)
(re-search-forward notmuch-show-header-begin-regexp)
(forward-line)
- (let ((beg (point-marker)))
+ (let ((beg (point-marker))
+ (btn nil))
(end-of-line)
; Inverse video for subject
(overlay-put (make-overlay beg (point)) 'face '(:inverse-video t))
+ (setq btn (make-button beg (point) :type 'notmuch-button-body-toggle-type))
(forward-line 1)
(end-of-line)
(let ((beg-hidden (point-marker)))
@@ -614,23 +626,25 @@ which this thread was originally shown."
'invisible invis-spec)
(goto-char beg)
(forward-line)
- (notmuch-configure-invisibility-button
- (make-button (line-beginning-position) (line-end-position))
- (cons invis-spec t) "Show headers"))
+ (make-button (line-beginning-position) (line-end-position)
+ 'invisibility-spec (cons invis-spec t)
+ :type 'notmuch-button-headers-toggle-type))
(goto-char end)
(insert "\n")
(set-marker beg nil)
(set-marker beg-hidden nil)
(set-marker end nil)
- ))))
+ ))
+ btn))
(defun notmuch-show-markup-message ()
(if (re-search-forward notmuch-show-message-begin-regexp nil t)
(progn
(re-search-forward notmuch-show-depth-regexp)
- (let ((depth (string-to-number (buffer-substring (match-beginning 1) (match-end 1)))))
- (notmuch-show-markup-header depth)
- (notmuch-show-markup-body depth)))
+ (let ((depth (string-to-number (buffer-substring (match-beginning 1) (match-end 1))))
+ (btn nil))
+ (setq btn (notmuch-show-markup-header depth))
+ (notmuch-show-markup-body depth btn)))
(goto-char (point-max))))
(defun notmuch-show-hide-markers ()
@@ -650,17 +664,6 @@ which this thread was originally shown."
(notmuch-show-markup-message)))
(notmuch-show-hide-markers))
-(defun notmuch-show-toggle-body-read-visible ()
- "Toggle visibility of message bodies of read messages"
- (interactive)
- (if notmuch-show-body-read-visible
- (add-to-invisibility-spec 'notmuch-show-body-read)
- (remove-from-invisibility-spec 'notmuch-show-body-read))
- (set 'notmuch-show-body-read-visible (not notmuch-show-body-read-visible))
- ; Need to force the redisplay for some reason
- (force-window-update)
- (redisplay t))
-
;;;###autoload
(defun notmuch-show-mode ()
"Major mode for viewing a thread with notmuch.
@@ -689,14 +692,6 @@ view, (remove the \"inbox\" tag from each), with
\\{notmuch-show-mode-map}"
(interactive)
(kill-all-local-variables)
- (set (make-local-variable 'notmuch-show-headers-visible) t)
- (notmuch-show-toggle-headers-visible)
- (set (make-local-variable 'notmuch-show-body-read-visible) t)
- (notmuch-show-toggle-body-read-visible)
- (set (make-local-variable 'notmuch-show-citations-visible) t)
- (notmuch-show-toggle-citations-visible)
- (set (make-local-variable 'notmuch-show-signatures-visible) t)
- (notmuch-show-toggle-signatures-visible)
(add-to-invisibility-spec 'notmuch-show-marker)
(use-local-map notmuch-show-mode-map)
(setq major-mode 'notmuch-show-mode
@@ -765,7 +760,16 @@ thread from that buffer can be show when done with this one)."
(if (not (notmuch-show-message-unread-p))
(progn
(goto-char (point-min))
- (notmuch-show-toggle-body-read-visible)))))
+ (let ((btn (forward-button 1)))
+ (while btn
+ (if (button-has-type-p btn 'notmuch-button-body-toggle-type)
+ (push-button))
+ (condition-case err
+ (setq btn (forward-button 1))
+ (error (setq btn nil)))
+ ))
+ (beginning-of-buffer)
+ ))))
)))
(defvar notmuch-search-authors-width 40
@@ -803,6 +807,7 @@ thread from that buffer can be show when done with this one)."
(defvar notmuch-search-query-string)
(defvar notmuch-search-oldest-first)
+
(defun notmuch-search-scroll-up ()
"Scroll up, moving point to last message in thread if at end."
(interactive)
--
1.6.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 5/5] Remove the global expand body keymapping
2009-11-24 7:45 ` [PATCH 4/5] Make bodies locally toggleable Alexander Botero-Lowry
@ 2009-11-24 7:45 ` Alexander Botero-Lowry
0 siblings, 0 replies; 8+ messages in thread
From: Alexander Botero-Lowry @ 2009-11-24 7:45 UTC (permalink / raw)
To: notmuch
---
notmuch.el | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/notmuch.el b/notmuch.el
index af0c487..907df2c 100644
--- a/notmuch.el
+++ b/notmuch.el
@@ -61,7 +61,6 @@
; overlays-at to query and manipulate the current overlay.
(define-key map "a" 'notmuch-show-archive-thread)
(define-key map "A" 'notmuch-show-mark-read-then-archive-thread)
- (define-key map "b" 'notmuch-show-toggle-body-read-visible)
(define-key map "m" 'message-mail)
(define-key map "n" 'notmuch-show-next-message)
(define-key map "N" 'notmuch-show-mark-read-then-next-open-message)
--
1.6.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/5] make headers locally expandable/collapsable
2009-11-24 7:45 [PATCH 1/5] make headers locally expandable/collapsable Alexander Botero-Lowry
2009-11-24 7:45 ` [PATCH 2/5] cleanup a lot of left-overs from the global invis Alexander Botero-Lowry
@ 2009-11-24 19:40 ` Carl Worth
2009-11-24 19:49 ` Alexander Botero-Lowry
1 sibling, 1 reply; 8+ messages in thread
From: Carl Worth @ 2009-11-24 19:40 UTC (permalink / raw)
To: Alexander Botero-Lowry, notmuch
On Mon, 23 Nov 2009 23:45:03 -0800, Alexander Botero-Lowry <alex.boterolowry@gmail.com> wrote:
> ---
> notmuch.el | 18 +++++++++++++++---
> 1 files changed, 15 insertions(+), 3 deletions(-)
Hmm... no real content for me to reply to here... :-)
Anyway, this is really great stuff, Alexander. Thanks for coding it up!
I've pushed it out now, (with a little bit more in the way of commit
messages---thanks for humoring me).
I noticed that I could open and re-collapse a message that notmuch
initially presents as hidden, but I didn't seem to be able to collapse
an initially-open message. Now, I'm sure that's due to broken-ness in
code I wrote myself originally. But as a future-feature request, that
might be some consistency that would be nice to have.
-Carl
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/5] make headers locally expandable/collapsable
2009-11-24 19:40 ` [PATCH 1/5] make headers locally expandable/collapsable Carl Worth
@ 2009-11-24 19:49 ` Alexander Botero-Lowry
2009-11-27 13:43 ` Carl Worth
0 siblings, 1 reply; 8+ messages in thread
From: Alexander Botero-Lowry @ 2009-11-24 19:49 UTC (permalink / raw)
To: Carl Worth, notmuch
On Tue, 24 Nov 2009 11:40:24 -0800, Carl Worth <cworth@cworth.org> wrote:
[snip]
> Anyway, this is really great stuff, Alexander. Thanks for coding it up!
>
Awesome thanks. Makes things much more useable anyway. :)
> I've pushed it out now, (with a little bit more in the way of commit
> messages---thanks for humoring me).
>
Ahh, come on, Lorem Ipsum was such a clear and detailed commit message. :D
> I noticed that I could open and re-collapse a message that notmuch
> initially presents as hidden, but I didn't seem to be able to collapse
> an initially-open message. Now, I'm sure that's due to broken-ness in
> code I wrote myself originally. But as a future-feature request, that
> might be some consistency that would be nice to have.
>
Odd. I wouldn't be suprised were that behavior the case, but I can not
reproduce it locally. I totally agree it should be the case, but I seem
to be able to expand collapse already open messages without a problem..
alex
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/5] make headers locally expandable/collapsable
2009-11-24 19:49 ` Alexander Botero-Lowry
@ 2009-11-27 13:43 ` Carl Worth
0 siblings, 0 replies; 8+ messages in thread
From: Carl Worth @ 2009-11-27 13:43 UTC (permalink / raw)
To: Alexander Botero-Lowry, notmuch
On Tue, 24 Nov 2009 11:49:40 -0800, Alexander Botero-Lowry <alex.boterolowry@gmail.com> wrote:
> On Tue, 24 Nov 2009 11:40:24 -0800, Carl Worth <cworth@cworth.org> wrote:
>
> Odd. I wouldn't be suprised were that behavior the case, but I can not
> reproduce it locally. I totally agree it should be the case, but I seem
> to be able to expand collapse already open messages without a problem..
OK. I can't reproduce this now either. So feel free to ignore me.
-Carl
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-11-27 13:43 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-24 7:45 [PATCH 1/5] make headers locally expandable/collapsable Alexander Botero-Lowry
2009-11-24 7:45 ` [PATCH 2/5] cleanup a lot of left-overs from the global invis Alexander Botero-Lowry
2009-11-24 7:45 ` [PATCH 3/5] make a nice function for generating invisibility toggle buttons Alexander Botero-Lowry
2009-11-24 7:45 ` [PATCH 4/5] Make bodies locally toggleable Alexander Botero-Lowry
2009-11-24 7:45 ` [PATCH 5/5] Remove the global expand body keymapping Alexander Botero-Lowry
2009-11-24 19:40 ` [PATCH 1/5] make headers locally expandable/collapsable Carl Worth
2009-11-24 19:49 ` Alexander Botero-Lowry
2009-11-27 13:43 ` Carl Worth
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.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).