From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Po Lu via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#61325: 30.0.50; Jokes in GNUS manual Date: Sun, 19 Feb 2023 13:04:44 +0800 Message-ID: <87ilfyjleb.fsf@yahoo.com> References: <87ttzy7pg1.fsf@localhost> <87wn4u6xj0.fsf@yahoo.com> <87sffg69yj.fsf@yahoo.com> <87zg9f3rz4.fsf@localhost> Reply-To: Po Lu Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="33509"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: yantar92@posteo.net, 61325@debbugs.gnu.org, Jean Louis To: Richard Stallman Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Feb 19 06:08:27 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pTbw2-0008aK-JY for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 19 Feb 2023 06:08:26 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pTbvm-0006i6-TH; Sun, 19 Feb 2023 00:08:10 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pTbvf-0006hm-8D for bug-gnu-emacs@gnu.org; Sun, 19 Feb 2023 00:08:04 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pTbvd-0006aC-Su for bug-gnu-emacs@gnu.org; Sun, 19 Feb 2023 00:08:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pTbvd-0006nZ-Ls for bug-gnu-emacs@gnu.org; Sun, 19 Feb 2023 00:08:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Po Lu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 19 Feb 2023 05:08:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61325 X-GNU-PR-Package: emacs Original-Received: via spool by 61325-submit@debbugs.gnu.org id=B61325.167678323426076 (code B ref 61325); Sun, 19 Feb 2023 05:08:01 +0000 Original-Received: (at 61325) by debbugs.gnu.org; 19 Feb 2023 05:07:14 +0000 Original-Received: from localhost ([127.0.0.1]:45428 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pTbur-0006mV-6L for submit@debbugs.gnu.org; Sun, 19 Feb 2023 00:07:14 -0500 Original-Received: from sonic313-37.consmr.mail.ne1.yahoo.com ([66.163.185.60]:43319) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pTbuo-0006mG-1l for 61325@debbugs.gnu.org; Sun, 19 Feb 2023 00:07:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1676783224; bh=N4hnMdEl5ZAMAxpORpiFd5IPgusUviKXmo0cnLa04ZM=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To; b=JKKxGFngl7yfisRqBuU88dGyWwnnxXeg/BJ/ZIXNhC21j2h8GS4G2ig0bkSWSCoPRx5Sd+YTP2U2i70PcvJ1Y/Yg54yCfAapkmqywIDdt61hIwLZ7th/QqMo69App8s17R9/hgWE9uV/EYz9dqTvsSiCTtj9Y8vI3gdwdCNvsiuoW8N4qFeINqPnJmjQeimuFptIyCvIzeNT4BUXn5tnhKxpke+XKmUYSJDjAJ/dr4I4Q2pJuguxCcJTEqu1lfrkRIghy9eEoQ1ffPvNaltnvbstsczDVleEo3TOdWP76grrsVJbzDkAUNhv58EafCPomKGp7tcfY2ChQnwdNyMOcw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1676783224; bh=k2xDRks18ALDx5MZPFZ3BqQbqg243jL/SF6+GRoxDUK=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=YCJQAwvWtQxHV35Wem7l6tqnCAOWFxiiY0O2q/FV+2N6RQQGUX/IEbPzc8m0hFULzkBLapnCg0Q8T5t3TCGoP9ztH4rE2Ih9XDeENU7H3OjlHrkbKNcx1bfiR2FdnpF0JwTTddENU7rw3ztNYTi2ba3l5LCLVv7p2gSWovDX/sTnl2wBZPvfHZrGgsltQeP4Y3LUH71Kbr1dDJbMEbVfoUdZ9fdcky1w10NHhJmWtPSXdvLn25sTxe9gxuD3aJ2r42opsFFX8E7IErCc/kVvvRj5rDDH7eOJarF3UzRvkg4zEvzhowzguQSWRbmVcPpLe6C1rPHYiBxGy5yitxkieA== X-YMail-OSG: EVPKu78VM1kFu5NCspg1GvvosQfdEDz8XhofjRsfPJl21Z4fwp0TwcJA9BELc5N _mY0Q3.KFS_y8la03_SfwTfvvj1Bb6ktkpceB10M4bCyo0z9kUmUEOmmeQ4ZfHjVZ.169MRlqlM9 r4TwClxu_PMNm5a0PgSHKLyMacXe6thFCtCuLHYscpAdPUOrlHaUAGTTaYm5Gna_UF83ION7uR9g dTCR4M0WtaCH83m0tEIbpFO8A7_lR8I31uAKomsYtGwz4Qswf_a5FcIAizsipsFQ4LVfpXbhGL2h isQgFoZ8MHYM.jdcTlKt_VHFTb_uGpvvRUlGii3lr9R1WCfOoBhfl5lHH8hEzshfjOKPEDr5Qfom KLZvndhLsUdLqZtC53Eh8B.e71L_LCWFK3OBf.gxsTpHsDhb.GjH3Dw4j7w4zmJpca.3ZuefhBin .dvlvogilQl1CRl0c82rPYBicSU7Sqnbdz3H8B8bqw7Yf8aleqSAXYRd0TtInGdFdL_7jLTls8Ai aUa_Osdk7LXRG1StffawvW5GFXslVnE0CMTHTkOIn.g6DXXR3r5clnGuJlssgA0xRyp8wIlsby11 IuSY9BCjUx2wdkSZbeidXUBmMyWJ5OM0KpylvqU..LCGIHiKpzVWIcylpPwj3_BATImchNdc2fH3 wMnI4TgCVt7k9BaPy1EjAnMDvqYvMVbUkvu7NWoJUMVH02o1vtW0LMPLSh8.8Mz1BC3hmAKVg0vr T7J7GxGu55dqkKRclUZoNkjKOII2s9ZVO8rGtl3V23MCFVQrU4jDuKT1lZf8XjSp_A0TSnxWWw0r i45PjjQGfzHsV64ZTkzxOHgyE7PRS5kvHAGFMFl02P X-Sonic-MF: Original-Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.ne1.yahoo.com with HTTP; Sun, 19 Feb 2023 05:07:04 +0000 Original-Received: by hermes--production-sg3-9fc5746c8-97g7j (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 5262205068a10a056fc827b618a61087; Sun, 19 Feb 2023 05:05:00 +0000 (UTC) In-Reply-To: (Richard Stallman's message of "Sat, 18 Feb 2023 23:50:01 -0500") X-Mailer: WebService/1.1.21183 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:256021 Archived-At: Richard Stallman 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. ]]] > > > A kill file (also killfile, bozo bin or twit list) is a file used > > by some Usenet reading programs to discard articles matching some > > unwanted patterns of subject, author, or other header > > lines. Adding a person or subject to one's kill file means that > > person or topic will be ignored by one's newsreader in the > > future. By extension, the term may be used for a decision to > > ignore the person or subject in other media. > > I see. But the manual has to tell the reader this, if it mentions > kill files at all. > > > More advanced newsreader software like Gnus sometimes provides a > > more sophisticated form of filter known as scoring, where score > > files are maintained which use fuzzy logic to apply arbitrarily > > complex overlapping sets of rules to score articles up or down, > > with articles being properly killed (ignored by the newsreader) > > only when their weighted score drops below a user-defined > > threshold. > > That seems like a useful feature. But the GNUS manual has to explain it. And, it does... 8.13 Kill Files =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Gnus still supports those pesky old kill files. In fact, the kill file entries can now be expiring, which is something I wrote before Daniel Quinlan thought of doing score files, so I=E2=80=99ve left the code in ther= e. In short, kill processing is a lot slower (and I do mean _a lot_) than score processing, so it might be a good idea to rewrite your kill files into score files. Anyway, a kill file is a normal =E2=80=98emacs-lisp=E2=80=99 file. You = can put any forms into this file, which means that you can use kill files as some sort of primitive hook function to be run on group entry, even though that isn=E2=80=99t a very good idea. Normal kill files look like this: (gnus-kill "From" "Lars Ingebrigtsen") (gnus-kill "Subject" "ding") (gnus-expunge "X") This will mark every article written by me as read, and remove the marked articles from the summary buffer. Very useful, you=E2=80=99ll agree. Other programs use a totally different kill file syntax. If Gnus encounters what looks like a =E2=80=98rn=E2=80=99 kill file, it will take a= stab at interpreting it. Two summary functions for editing a GNUS kill file: =E2=80=98M-k=E2=80=99 Edit this group=E2=80=99s kill file (=E2=80=98gnus-summary-edit-local-= kill=E2=80=99). =E2=80=98M-K=E2=80=99 Edit the general kill file (=E2=80=98gnus-summary-edit-global-kill=E2= =80=99). Two group mode functions for editing the kill files: =E2=80=98M-k=E2=80=99 Edit this group=E2=80=99s kill file (=E2=80=98gnus-group-edit-local-ki= ll=E2=80=99). =E2=80=98M-K=E2=80=99 Edit the general kill file (=E2=80=98gnus-group-edit-global-kill=E2=80= =99). Kill file variables: =E2=80=98gnus-kill-file-name=E2=80=99 A kill file for the group =E2=80=98soc.motss=E2=80=99 is normally call= ed =E2=80=98soc.motss.KILL=E2=80=99. The suffix appended to the group na= me to get this file name is detailed by the =E2=80=98gnus-kill-file-name=E2=80= =99 variable. The =E2=80=9Cglobal=E2=80=9D kill file (not in the score file sense of= =E2=80=9Cglobal=E2=80=9D, of course) is just called =E2=80=98KILL=E2=80=99. =E2=80=98gnus-kill-save-kill-file=E2=80=99 If this variable is non-=E2=80=98nil=E2=80=99, Gnus will save the kill= file after processing, which is necessary if you use expiring kills. =E2=80=98gnus-apply-kill-hook=E2=80=99 A hook called to apply kill files to a group. It is =E2=80=98(gnus-apply-kill-file)=E2=80=99 by default. If you want to i= gnore the kill file if you have a score file for the same group, you can set this hook to =E2=80=98(gnus-apply-kill-file-unless-scored)=E2=80=99. = If you don=E2=80=99t want kill files to be processed, you should set this variable to =E2=80=98nil=E2=80=99. =E2=80=98gnus-kill-file-mode-hook=E2=80=99 A hook called in kill-file mode buffers. 8.4 Score File Format =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D A score file is an =E2=80=98emacs-lisp=E2=80=99 file that normally contains= just a single form. Casual users are not expected to edit these files; everything can be changed from the summary buffer. Anyway, if you=E2=80=99d like to dig into it yourself, here=E2=80=99s an= example: (("from" ("Lars Ingebrigtsen" -10000) ("Per Abrahamsen") ("larsi\\|lmi" -50000 nil R)) ("subject" ("Ding is Badd" nil 728373)) ("xref" ("alt.politics" -1000 728372 s)) ("lines" (2 -100 nil <)) (mark 0) (expunge -1000) (mark-and-expunge -10) (read-only nil) (orphan -10) (adapt t) (files "/hom/larsi/News/gnu.SCORE") (exclude-files "all.SCORE") (local (gnus-newsgroup-auto-expire t) (gnus-summary-make-false-root empty)) (eval (ding))) This example demonstrates most score file elements. *Note Advanced Scoring::, for a different approach. Even though this looks much like Lisp code, nothing here is actually =E2=80=98eval=E2=80=99ed. The Lisp reader is used to read this form, thoug= h, so it has to be valid syntactically, if not semantically. Six keys are supported by this alist: =E2=80=98STRING=E2=80=99 If the key is a string, it is the name of the header to perform the match on. Scoring can only be performed on these eight headers: =E2=80=98From=E2=80=99, =E2=80=98Subject=E2=80=99, =E2=80=98References= =E2=80=99, =E2=80=98Message-ID=E2=80=99, =E2=80=98Xref=E2=80=99, =E2=80=98L= ines=E2=80=99, =E2=80=98Chars=E2=80=99 and =E2=80=98Date=E2=80=99. In addition to th= ese headers, there are three strings to tell Gnus to fetch the entire article and do the match on larger parts of the article: =E2=80=98Body=E2=80=99 will perform th= e match on the body of the article, =E2=80=98Head=E2=80=99 will perform the match= on the head of the article, and =E2=80=98All=E2=80=99 will perform the match on th= e entire article. Note that using any of these last three keys will slow down group entry _considerably_. The final =E2=80=9Cheader=E2=80=9D y= ou can score on is =E2=80=98Followup=E2=80=99. These score entries will result in = new score entries being added for all follow-ups to articles that matches these score entries. Following this key is an arbitrary number of score entries, where each score entry has one to four elements. 1. The first element is the =E2=80=9Cmatch element=E2=80=9D. On mos= t headers this will be a string, but on the Lines and Chars headers, this must be an integer. 2. If the second element is present, it should be a number=E2=80=94t= he =E2=80=9Cscore element=E2=80=9D. This number should be an intege= r in the neginf to posinf interval. This number is added to the score of the article if the match is successful. If this element is not present, the =E2=80=98gnus-score-interactive-default-score=E2= =80=99 number will be used instead. This is 1000 by default. 3. If the third element is present, it should be a number=E2=80=94the =E2=80=9Cdate element=E2=80=9D. This date says when the last tim= e this score entry matched, which provides a mechanism for expiring the score entries. It this element is not present, the score entry is permanent. The date is represented by the number of days since December 31, 1 BCE. 4. If the fourth element is present, it should be a symbol=E2=80=94t= he =E2=80=9Ctype element=E2=80=9D. This element specifies what func= tion should be used to see whether this score entry matches the article. What match types that can be used depends on what header you wish to perform the match on. =E2=80=9CFrom, Subject, References, Xref, Message-ID=E2=80=9D For most header types, there are the =E2=80=98r=E2=80=99 and= =E2=80=98R=E2=80=99 (regexp), as well as =E2=80=98s=E2=80=99 and =E2=80=98S=E2= =80=99 (substring) types, and =E2=80=98e=E2=80=99 and =E2=80=98E=E2=80=99 (exact match), a= nd =E2=80=98w=E2=80=99 (word match) types. If this element is not present, Gnus will assume that substring matching should be used. =E2=80=98R=E2=80=99, =E2= =80=98S=E2=80=99, and =E2=80=98E=E2=80=99 differ from the others in that the matches will be done in a case-sensitive manner. All these one-letter types are really just abbreviations for the =E2=80=98regexp=E2=80= =99, =E2=80=98string=E2=80=99, =E2=80=98exact=E2=80=99, and =E2=80=98word=E2=80=99 types, w= hich you can use instead, if you feel like. =E2=80=9CExtra=E2=80=9D Just as for the standard string overview headers, if you are using gnus-extra-headers, you can score on these headers=E2=80=99 values. In this case, there is a 5th eleme= nt in the score entry, being the name of the header to be scored. The following entry is useful in your =E2=80=98all.SCORE=E2=80=99 file in case of spam attacks fro= m a single origin host, if your NNTP server tracks =E2=80=98NNTP-Posting-Host=E2=80=99 in overviews: ("111.222.333.444" -1000 nil s "NNTP-Posting-Host") =E2=80=9CLines, Chars=E2=80=9D These two headers use different match types: =E2=80=98<=E2= =80=99, =E2=80=98>=E2=80=99, =E2=80=98=3D=E2=80=99, =E2=80=98>=3D=E2=80=99 and =E2=80=98<= =3D=E2=80=99. These predicates are true if (PREDICATE HEADER MATCH) evaluates to non-=E2=80=98nil=E2=80=99. For instance, the a= dvanced match =E2=80=98("lines" 4 <)=E2=80=99 (*note Advanced Scoring::) w= ill result in the following form: (< header-value 4) Or to put it another way: When using =E2=80=98<=E2=80=99 on = =E2=80=98Lines=E2=80=99 with 4 as the match, we get the score added if the article has less than 4 lines. (It=E2=80=99s easy to get confused and t= hink it=E2=80=99s the other way around. But it=E2=80=99s not. I= think.) When matching on =E2=80=98Lines=E2=80=99, be careful because= some back ends (like =E2=80=98nndir=E2=80=99) do not generate =E2=80= =98Lines=E2=80=99 header, so every article ends up being marked as having 0 lines. This can lead to strange results if you happen to lower score of the articles with few lines. =E2=80=9CDate=E2=80=9D For the Date header we have three kinda silly match types: =E2=80=98before=E2=80=99, =E2=80=98at=E2=80=99 and = =E2=80=98after=E2=80=99. I can=E2=80=99t really imagine this ever being useful, but, like, it would feel kinda silly not to provide this function. Just in case. You never know. Better safe than sorry. Once burnt, twice shy. Don=E2=80=99t judge a book by its cover. Never = not have sex on a first date. (I have been told that at least one person, and I quote, =E2=80=9Cfound this function indispensable=E2=80=9D, however.) A more useful match type is =E2=80=98regexp=E2=80=99. With = it, you can match the date string using a regular expression. The date is normalized to ISO8601 compact format first=E2=80=94YYYYMMDD=E2=80=98T=E2=80=99HHMMSS. If you wan= t to match all articles that have been posted on April 1st in every year, you could use =E2=80=98....0401.........=E2=80=99 as a= match string, for instance. (Note that the date is kept in its original time zone, so this will match articles that were posted when it was April 1st where the article was posted from. Time zones are such wholesome fun for the whole family, eh?) Finally, two actually useful match types for dates: =E2=80= =98<=E2=80=99 and =E2=80=98>=E2=80=99. These will allow scoring on the re= lative age (in days) of the articles. Here=E2=80=99s an example score = file using the method: (("date" (7 10 nil <) (7 -10 nil >) (14 -10 nil >))) This results in articles less than a week old getting a 10 point increase, articles older than a week getting a 10 point decrease, and articles older than two weeks getting a cumulative 20 point decrease. The day can also be a floating point number: To score articles less than an hour old, you can say =E2=80=98(0.04 1= 0 nil <)=E2=80=99. =E2=80=9CHead, Body, All=E2=80=9D These three match keys use the same match types as the =E2=80=98From=E2=80=99 (etc.) header uses. =E2=80=9CFollowup=E2=80=9D This match key is somewhat special, in that it will match the =E2=80=98From=E2=80=99 header, and affect the score of n= ot only the matching articles, but also all followups to the matching articles. This allows you to increase the score of followups to your own articles, or decrease the score of followups to the articles of some known trouble-maker. Uses the same match types as the =E2=80=98From=E2=80=99 head= er uses. (Using this match key will lead to creation of =E2=80=98ADAP= T=E2=80=99 files.) =E2=80=9CThread=E2=80=9D This match key works along the same lines as the =E2=80=98Followup=E2=80=99 match key. If you say that you w= ant to score on a (sub-)thread started by an article with a =E2=80=98Message-ID=E2=80=99 X, then you add a =E2=80=98thre= ad=E2=80=99 match. This will add a new =E2=80=98thread=E2=80=99 match for each article th= at has X in its =E2=80=98References=E2=80=99 header. (These new =E2=80= =98thread=E2=80=99 matches will use the =E2=80=98Message-ID=E2=80=99s of these matching= articles.) This will ensure that you can raise/lower the score of an entire thread, even though some articles in the thread may not have complete =E2=80=98References=E2=80=99 headers. = Note that using this may lead to nondeterministic scores of the articles in the thread. (Using this match key will lead to creation of =E2=80=98ADAPT=E2=80=99 files.) =E2=80=98score-fn=E2=80=99 The value of this entry should be one or more user-defined function names in parentheses. Each function will be called in order and the returned value is required to be an integer. (score-fn (custom-scoring)) The user-defined function is called with an association list with the keys =E2=80=98number subject from date id refs chars lines xref ex= tra=E2=80=99 followed by the article=E2=80=99s score before the function is run. The following (somewhat contrived) example shows how to use a user-defined function that increases an article=E2=80=99s score by 10 = if the year of the article=E2=80=99s date is also mentioned in its subjec= t. (defun custom-scoring (article-alist score) (let ((subject (cdr (assoc 'subject article-alist))) (date (cdr (assoc 'date article-alist)))) (if (string-match (number-to-string (nth 5 (parse-time-string date))) subject) 10))) =E2=80=98score-fn=E2=80=99 entries are permanent and can only be added= or modified directly in the =E2=80=98SCORE=E2=80=99 file. =E2=80=98mark=E2=80=99 The value of this entry should be a number. Any articles with a score lower than this number will be marked as read. =E2=80=98expunge=E2=80=99 The value of this entry should be a number. Any articles with a score lower than this number will be removed from the summary buffer. =E2=80=98mark-and-expunge=E2=80=99 The value of this entry should be a number. Any articles with a score lower than this number will be marked as read and removed from the summary buffer. =E2=80=98thread-mark-and-expunge=E2=80=99 The value of this entry should be a number. All articles that belong to a thread that has a total score below this number will be marked as read and removed from the summary buffer. =E2=80=98gnus-thread-score-function=E2=80=99 says how to compute the t= otal score for a thread. =E2=80=98files=E2=80=99 The value of this entry should be any number of file names. These files are assumed to be score files as well, and will be loaded the same way this one was. =E2=80=98exclude-files=E2=80=99 The clue of this entry should be any number of files. These files will not be loaded, even though they would normally be so, for some reason or other. =E2=80=98eval=E2=80=99 The value of this entry will be =E2=80=98eval=E2=80=99ed. This elemen= t will be ignored when handling global score files. =E2=80=98read-only=E2=80=99 Read-only score files will not be updated or saved. Global score files should feature this atom (*note Global Score Files::). (Note: =E2=80=9CGlobal=E2=80=9D here really means =E2=80=9Cglobal=E2= =80=9D; not your personal apply-to-all-groups score files.) =E2=80=98orphan=E2=80=99 The value of this entry should be a number. Articles that do not have parents will get this number added to their scores. Imagine you follow some high-volume newsgroup, like =E2=80=98comp.lang.c=E2=80= =99. Most likely you will only follow a few of the threads, also want to see any new threads. You can do this with the following two score file entries: (orphan -500) (mark-and-expunge -100) When you enter the group the first time, you will only see the new threads. You then raise the score of the threads that you find interesting (with =E2=80=98I T=E2=80=99 or =E2=80=98I S=E2=80=99), and= ignore (=E2=80=98c y=E2=80=99) the rest. Next time you enter the group, you will see new articles in the interesting threads, plus any new threads. I.e., the orphan score atom is for high-volume groups where a few interesting threads which can=E2=80=99t be found automatically by ordi= nary scoring rules exist. =E2=80=98adapt=E2=80=99 This entry controls the adaptive scoring. If it is =E2=80=98t=E2=80= =99, the default adaptive scoring rules will be used. If it is =E2=80=98ignore= =E2=80=99, no adaptive scoring will be performed on this group. If it is a list, this list will be used as the adaptive scoring rules. If it isn=E2=80= =99t present, or is something other than =E2=80=98t=E2=80=99 or =E2=80=98ig= nore=E2=80=99, the default adaptive scoring rules will be used. If you want to use adaptive scoring on most groups, you=E2=80=99d set =E2=80=98gnus-use-adaptive-s= coring=E2=80=99 to =E2=80=98t=E2=80=99, and insert an =E2=80=98(adapt ignore)=E2=80=99 in= the groups where you do not want adaptive scoring. If you only want adaptive scoring in a few groups, you=E2=80=99d set =E2=80=98gnus-use-adaptive-scoring=E2=80=99 = to =E2=80=98nil=E2=80=99, and insert =E2=80=98(adapt t)=E2=80=99 in the score files of the groups where you= want it. =E2=80=98adapt-file=E2=80=99 All adaptive score entries will go to the file named by this entry. It will also be applied when entering the group. This atom might be handy if you want to adapt on several groups at once, using the same adaptive file for a number of groups. =E2=80=98local=E2=80=99 The value of this entry should be a list of =E2=80=98(VAR VALUE)=E2=80= =99 pairs. Each VAR will be made buffer-local to the current summary buffer, and set to the value specified. This is a convenient, if somewhat strange, way of setting variables in some groups if you don=E2=80=99t = like hooks much. Note that the VALUE won=E2=80=99t be evaluated.