[news.misc] Annoying rn Xref bug

mangoe@mimsy.UUCP (03/26/87)

Now that the Xref feature supposedly works (it doesn't always, for me), I
get this annoying phenomenon which occurs when I undelete an article which
is posted to several groups, it appears in *all* of them.  When I delete it
from one, it disappears in *all* of them.  Has anyone else seen this
behavior?

C. Wingate

dave@onfcanim.UUCP (03/30/87)

In article <5963@mimsy.UUCP> mangoe@mimsy.UUCP (Charley Wingate) writes:
>Now that the Xref feature supposedly works (it doesn't always, for me), I
>get this annoying phenomenon which occurs when I undelete an article which
>is posted to several groups, it appears in *all* of them.  When I delete it
>from one, it disappears in *all* of them.  Has anyone else seen this
>behavior?

This is a feature.  When an article is marked unread, rn goes through
the bitmaps of any other groups the article is in and marks it unread
there as well.  To turn off this feature, comment out the definition of
MCHASE in the "defs.h" header file for rn.

I don't like the default behaviour either.  And just unsetting MCHASE still
isn't enough for me.  When I type 'm' or 'M' at an article, it is because
I don't want to read it now, in this rn session.  Thus, I don't want to
be asked about it once for each of the groups that it shows up in either.
The following modifications to "bits.c" alter rn so that when you type
'm' or 'M' the article is left unread in the current group, but marked
as *read* in all other groups in which it appears.

diff -r -c STD/bits.c ./bits.c
*** STD/bits.c	Wed Jan 28 15:21:52 1987
--- ./bits.c	Wed Jan 28 15:26:25 1987
***************
*** 205,211
  {
      check_first(artnum);
      onemore(artnum);
- #ifdef MCHASE
      if (!parse_maybe(artnum))
  	chase_xrefs(artnum,FALSE);
  #endif

--- 205,210 -----
  {
      check_first(artnum);
      onemore(artnum);
      if (!parse_maybe(artnum))
  #ifndef MCHASE
  	chase_xrefs(artnum,TRUE);
***************
*** 207,212
      onemore(artnum);
  #ifdef MCHASE
      if (!parse_maybe(artnum))
  	chase_xrefs(artnum,FALSE);
  #endif
  }

--- 206,214 -----
      check_first(artnum);
      onemore(artnum);
      if (!parse_maybe(artnum))
+ #ifndef MCHASE
+ 	chase_xrefs(artnum,TRUE);
+ #else
  	chase_xrefs(artnum,FALSE);
  #endif
  }
***************
*** 229,234
      oneless(artnum);			/* set the correct bit */
      dmcount++;
      fprintf(dmfp,"%ld\n",(long)artnum);
  }
  #endif
  

--- 231,239 -----
      oneless(artnum);			/* set the correct bit */
      dmcount++;
      fprintf(dmfp,"%ld\n",(long)artnum);
+ #ifndef MCHASE
+     chase_xrefs(artnum,TRUE);
+ #endif
  }
  #endif