*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 03:59:38 +0000 (03:59 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 03:59:38 +0000 (03:59 +0000)
12 files changed:
lisp/ChangeLog
lisp/gnus-cus.el
lisp/gnus-edit.el
lisp/gnus-msg.el
lisp/gnus-score.el
lisp/gnus.el
lisp/nnfolder.el
lisp/nnheader.el
lisp/nnmh.el
lisp/nntp.el
lisp/x-easymenu.el [new file with mode: 0644]
texi/gnus.texi

index 8db7418..7a72af2 100644 (file)
@@ -1,3 +1,34 @@
+Fri Oct 13 01:27:15 1995  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * nnmh.el (nnmh-request-list): Wouldn't recurse down symlinks. 
+
+       * nntp.el (nntp-request-close): Really kill all connections.
+
+Mon Oct  2 15:05:03 1995  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-edit.el (gnus-score-custom-sanify): Don't cut of number and
+       date match types to the first char, like we do for string match
+       types.  Reported by Kevin Christian
+       <kchrist@lochness.ncrmicro.ncr.com>.
+
+Thu Oct 12 09:28:32 1995  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus-msg.el: Don't require rmail.
+
+       * gnus.el (gnus-nov-parse-line): Might bug out on bogus NOV lines.
+
+Tue Sep 26 03:39:43 1995  Lars Magne Ingebrigtsen  <larsi@gjalp.ifi.uio.no>
+
+       * gnus.el (gnus-thread-sort-by-subject): Only strip Re:'s.
+
+Tue Sep 26 01:20:41 1995  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el (gnus-group-mode-map): gnus-group-description-apropos on
+               wrong key.
+
+       * nnheader.el (nnheader-insert-references): Would produce errant
+               References headers on articles without Message-IDs.
+
 Tue Sep 26 00:42:54 1995  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus.el: 5.0.5 & 5.0.6 are released.
index 78354db..b4845d8 100644 (file)
@@ -1,4 +1,4 @@
-;; gnus-cus.el --- User friendly customization of Gnus
+;;; gnus-cus.el --- User friendly customization of Gnus
 ;; Copyright (C) 1995 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@iesd.auc.dk>
index 75fd8a0..766b66f 100644 (file)
@@ -584,9 +584,12 @@ groups matched by the current score file.")
   (list (nth 0 entry)
        (or (nth 1 entry) gnus-score-interactive-default-score)
        (nth 2 entry)
-       (if (null (nth 3 entry)) 
-           's
-         (intern (substring (symbol-name (nth 3 entry)) 0 1)))))
+       (cond ((null (nth 3 entry))
+              's)
+             ((memq (nth 3 entry) '(before after at >= <=))
+              (nth 3 entry))
+             (t
+              (intern (substring (symbol-name (nth 3 entry)) 0 1))))))
 
 (defvar gnus-score-cache nil)
 
index 5321106..d2131e4 100644 (file)
@@ -28,7 +28,6 @@
 (require 'gnus)
 (require 'sendmail)
 (require 'gnus-ems)
-(require 'rmail)
 
 (defvar gnus-organization-file "/usr/lib/news/organization"
   "*Local news organization file.")
@@ -172,7 +171,7 @@ list, then those elements in that list will be checked.")
 (defvar gnus-delete-supersedes-headers
   "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Supersedes:"
   "*Header lines matching this regexp will be deleted before posting.
-It's best to delete old Path and Date headers before psoting to avoid
+It's best to delete old Path and Date headers before posting to avoid
 any confusion.")
 
 (defvar gnus-auto-mail-to-author nil
@@ -236,7 +235,8 @@ headers.")
 (defvar gnus-reply-subject nil)
 
 (eval-and-compile
-  (autoload 'gnus-uu-post-news "gnus-uu" nil t))
+  (autoload 'gnus-uu-post-news "gnus-uu" nil t)
+  (autoload 'rmail-output "rmailout"))
 
 \f
 ;;;
index 3836528..d82bcae 100644 (file)
@@ -784,6 +784,7 @@ SCORE is the score to add."
   (let (scores)
     ;; PLM: probably this is not the best place to clear orphan-score
     (setq gnus-orphan-score nil)
+    (setq gnus-scores-articles nil)
     ;; Load the score files.
     (while score-files
       (if (stringp (car score-files))
index 75ba331..6eb10dc 100644 (file)
@@ -1349,7 +1349,7 @@ variable (string, integer, character, etc).")
   "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
   "The mail address of the Gnus maintainers.")
 
-(defconst gnus-version "Gnus v5.0.6"
+(defconst gnus-version "Gnus v5.0.7"
   "Version number for this version of Gnus.")
 
 (defvar gnus-info-nodes
@@ -3104,7 +3104,7 @@ Note: LIST has to be sorted over `<'."
   (define-key gnus-group-mode-map "\C-c\C-d" 'gnus-group-describe-group)
   (define-key gnus-group-mode-map "\M-d" 'gnus-group-describe-all-groups)
   (define-key gnus-group-mode-map "\C-c\C-a" 'gnus-group-apropos)
-  (define-key gnus-group-mode-map "\C-c\M-C-a" 'gnus-group-description-apropos)
+  (define-key gnus-group-mode-map "\C-c\M-\C-a" 'gnus-group-description-apropos)
   (define-key gnus-group-mode-map "a" 'gnus-group-post-news)
   (define-key gnus-group-mode-map "\ek" 'gnus-group-edit-local-kill)
   (define-key gnus-group-mode-map "\eK" 'gnus-group-edit-global-kill)
@@ -6418,9 +6418,9 @@ If NO-ARTICLE is non-nil, no article is selected initially."
 (defun gnus-thread-sort-by-subject (h1 h2)
   "Sort threads by root subject."
   (string-lessp
-   (downcase (gnus-simplify-subject 
+   (downcase (gnus-simplify-subject-re
              (mail-header-subject (gnus-thread-header h1))))
-   (downcase (gnus-simplify-subject 
+   (downcase (gnus-simplify-subject-re 
              (mail-header-subject (gnus-thread-header h2))))))
 
 (defun gnus-thread-sort-by-date (h1 h2)
@@ -7323,7 +7323,7 @@ list of headers that match SEQUENCE (see `nntp-retrieve-headers')."
 
     ;; overview: [num subject from date id refs chars lines misc]
     (narrow-to-region (point) eol)
-    (forward-char)
+    (or (eobp) (forward-char))
 
     (condition-case nil
        (setq header
@@ -11141,7 +11141,7 @@ Provided for backwards compatability."
                                   "-c" gnus-article-x-face-command))))))))
 
 (defun gnus-article-de-quoted-unreadable (&optional force)
-  "Do a naïve translation of a quoted-printable-encoded article.
+  "Do a naive translation of a quoted-printable-encoded article.
 This is in no way, shape or form meant as a replacement for real MIME
 processing, but is simply a stop-gap measure until MIME support is
 written.
index 73624f6..17c4d9b 100644 (file)
@@ -275,7 +275,6 @@ such things as moving mail.  All buffers always get killed upon server close.")
        (setq nnfolder-group-alist 
              (cons (list group (setq active (cons 1 0)))
                    nnfolder-group-alist))
-       (nnfolder-possibly-change-group group)
        (nnmail-save-active nnfolder-group-alist nnfolder-active-file)))
   t)
 
@@ -613,7 +612,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
                                               (match-end 0)))))
                (setq activenumber (max activenumber newnum))
                (setq activemin (min activemin newnum))))
-           (setcar active (min activemin activenumber))
+           (setcar active (max 1 (min activemin activenumber)))
            (setcdr active (max activenumber (cdr active)))
            (goto-char (point-min))))
 
index bded782..8e30361 100644 (file)
@@ -339,17 +339,19 @@ The buffer is not selected, just returned to the caller."
       buf)))
 
 (defun nnheader-insert-references (references message-id)
-  ;; Fold long references line to follow RFC1036.
-  (mail-position-on-field "References")
-  (let ((begin (gnus-point-at-bol))
-       (fill-column 78)
-       (fill-prefix "\t"))
-    (if references (insert references))
-    (if (and references message-id) (insert " "))
-    (if message-id (insert message-id))
-    ;; The region must end with a newline to fill the region
-    ;; without inserting extra newline.
-    (fill-region-as-paragraph begin (1+ (point)))))
+  (if (and (not references) (not message-id)) 
+      () ; This is illegal, but not all articles have Message-IDs.
+    (mail-position-on-field "References")
+    ;; Fold long references line to follow RFC1036.
+    (let ((begin (gnus-point-at-bol))
+         (fill-column 78)
+         (fill-prefix "\t"))
+      (if references (insert references))
+      (if (and references message-id) (insert " "))
+      (if message-id (insert message-id))
+      ;; The region must end with a newline to fill the region
+      ;; without inserting extra newline.
+      (fill-region-as-paragraph begin (1+ (point))))))
 
 (provide 'nnheader)
 
index ff52358..3ee13de 100644 (file)
       (save-excursion
        (set-buffer nntp-server-buffer)
        (erase-buffer)
-       (setq dir (file-name-as-directory nnmh-directory))))
+       (setq dir (file-truename (file-name-as-directory nnmh-directory)))))
   (setq dir (expand-file-name dir))
   ;; Recurse down all directories.
   (let ((dirs (and (file-readable-p dir)
index 6bd0f37..85e6075 100644 (file)
@@ -29,6 +29,8 @@
 (require 'sendmail)
 (require 'nnheader)
 
+(eval-when-compile (require 'cl))
+
 (eval-and-compile
   (autoload 'news-setup "rnewspost")
   (autoload 'news-reply-mode "rnewspost")
@@ -159,6 +161,9 @@ instead use `nntp-server-buffer'.")
 You'd better not use this variable in NNTP front-end program but
 instead call function `nntp-status-message' to get status message.")
 
+(defvar nntp-opened-connections nil
+  "All (possibly) opened connections.")
+
 (defvar nntp-server-xover 'try)
 (defvar nntp-server-list-active-group 'try)
 (defvar nntp-current-group "")
@@ -379,22 +384,13 @@ instead call function `nntp-status-message' to get status message.")
 (defun nntp-request-close ()
   "Close all server connections."
   (let (proc)
-    (and nntp-async-process
-        (progn
-          (delete-process nntp-async-process)
-          (and (get-buffer nntp-async-buffer)
-               (kill-buffer nntp-async-buffer))))
-    (while nntp-async-group-alist
-      (and (nth 3 (car nntp-async-group-alist))
-          (delete-process (nth 3 (car nntp-async-group-alist))))
-      (setq nntp-async-group-alist (cdr nntp-async-group-alist)))
+    (while nntp-opened-connections
+      (setq proc (pop nntp-opened-connections))
+      (and proc (delete-process proc)))
+    (and nntp-async-buffer
+        (get-buffer nntp-async-buffer)
+        (kill-buffer nntp-async-buffer))
     (while nntp-server-alist
-      (and 
-       (setq proc (nth 1 (assq 'nntp-server-process (car nntp-server-alist))))
-       (delete-process proc))
-      (and 
-       (setq proc (nth 1 (assq 'nntp-async-process (car nntp-server-alist))))
-       (delete-process proc))
       (and (setq proc (nth 1 (assq 'nntp-async-buffer
                                   (car nntp-server-alist))))
           (buffer-name proc)
@@ -1110,6 +1106,7 @@ If SERVICE, this this as the port number."
            (setq nntp-address server)
            ;; It is possible to change kanji-fileio-code in this hook.
            (run-hooks 'nntp-server-hook)
+           (push proc nntp-opened-connections)
            nntp-server-process)))))
 
 (defun nntp-open-network-stream (server)
diff --git a/lisp/x-easymenu.el b/lisp/x-easymenu.el
new file mode 100644 (file)
index 0000000..26a9ec0
--- /dev/null
@@ -0,0 +1,177 @@
+;;; easymenu.el - Easy menu support for Emacs 19 and XEmacs.
+;; 
+;; $Id: easymenu.el,v 5.9 1995/02/14 19:44:00 amanda Exp $
+;;
+;; LCD Archive Entry:
+;; easymenu|Per Abrahamsen|abraham@iesd.auc.dk|
+;; Easy menu support for XEmacs|
+;; $Date: 1995/02/14 19:44:00 $|$Revision: 5.9 $|~/misc/easymenu.el.gz|
+
+;; Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+;;
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;; 
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;; 
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, write to the Free Software
+;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+;; Commentary:
+;;
+;; Easymenu allows you to define menus for both Emacs 19 and XEmacs.
+;;
+;; This file 
+;; The advantages of using easymenu are:
+;;
+;; - Easier to use than either the Emacs 19 and XEmacs menu syntax.
+;;
+;; - Common interface for Emacs 18, Emacs 19, and XEmacs.  
+;;   (The code does nothing when run under Emacs 18).
+;;
+;; The public functions are:
+;; 
+;; - Function: easy-menu-define SYMBOL MAPS DOC MENU
+;;     SYMBOL is both the name of the variable that holds the menu and
+;;            the name of a function that will present a the menu.
+;;     MAPS is a list of keymaps where the menu should appear in the menubar.
+;;     DOC is the documentation string for the variable.
+;;     MENU is an XEmacs style menu description.  
+;;
+;;     See the documentation for easy-menu-define for details.
+;;
+;; - Function: easy-menu-change PATH NAME ITEMS
+;;     Change an existing menu.
+;;     The menu must already exist an be visible on the menu bar.
+;;     PATH is a list of strings used for locating the menu on the menu bar. 
+;;     NAME is the name of the menu.  
+;;     ITEMS is a list of menu items, as defined in `easy-menu-define'.
+;;
+;; - Function: easy-menu-add MENU [ MAP ]
+;;     Add MENU to the current menubar in MAP.
+;;
+;; - Function: easy-menu-remove MENU
+;;     Remove MENU from the current menubar.
+;;
+;; Emacs 19 never uses `easy-menu-add' or `easy-menu-remove', menus
+;; automatically appear and disappear when the keymaps specified by
+;; the MAPS argument to `easy-menu-define' are activated.
+;;
+;; XEmacs will bind the map to button3 in each MAPS, but you must
+;; explicitly call `easy-menu-add' and `easy-menu-remove' to add and
+;; remove menus from the menu bar.
+
+;;; Code:
+
+;;;###autoload
+(defmacro easy-menu-define (symbol maps doc menu)
+  "Define a menu bar submenu in maps MAPS, according to MENU.
+The arguments SYMBOL and DOC are ignored; they are present for
+compatibility only.  SYMBOL is not evaluated.  In other Emacs versions
+these arguments may be used as a variable to hold the menu data, and a
+doc string for that variable.
+
+The first element of MENU must be a string.  It is the menu bar item name.
+The rest of the elements are menu items.
+
+A menu item is usually a vector of three elements:  [NAME CALLBACK ENABLE]
+
+NAME is a string--the menu item name.
+
+CALLBACK is a command to run when the item is chosen,
+or a list to evaluate when the item is chosen.
+
+ENABLE is an expression; the item is enabled for selection
+whenever this expression's value is non-nil.
+
+Alternatively, a menu item may have the form: 
+
+   [ NAME CALLBACK [ KEYWORD ARG ] ... ]
+
+Where KEYWORD is one of the symbol defined below.
+
+   :keys KEYS
+
+KEYS is a string; a complex keyboard equivalent to this menu item.
+
+   :active ENABLE
+
+ENABLE is an expression; the item is enabled for selection
+whenever this expression's value is non-nil.
+
+   :suffix NAME
+
+NAME is a string; the name of an argument to CALLBACK.
+
+   :style STYLE
+   
+STYLE is a symbol describing the type of menu item.  The following are
+defined:  
+
+toggle: A checkbox.  
+        Currently just prepend the name with the string \"Toggle \".
+radio: A radio button. 
+nil: An ordinary menu item.
+
+   :selected SELECTED
+
+SELECTED is an expression; the checkbox or radio button is selected
+whenever this expression's value is non-nil.
+Currently just disable radio buttons, no effect on checkboxes.
+
+A menu item can be a string.  Then that string appears in the menu as
+unselectable text.  A string consisting solely of hyphens is displayed
+as a solid horizontal line.
+
+A menu item can be a list.  It is treated as a submenu.
+The first element should be the submenu name.  That's used as the
+menu item in the top-level menu.  The cdr of the submenu list
+is a list of menu items, as above."
+  (` (progn
+       (defvar (, symbol) nil (, doc))
+       (easy-menu-do-define (quote (, symbol)) (, maps) (, doc) (, menu)))))
+
+(defun easy-menu-do-define (symbol maps doc menu)
+  (set symbol menu)
+  (fset symbol (list 'lambda '(e)
+                    doc
+                    '(interactive "@e")
+                    '(run-hooks 'activate-menubar-hook)
+                    '(setq zmacs-region-stays 't)
+                    (list 'popup-menu symbol)))
+  (mapcar (function (lambda (map) (define-key map 'button3 symbol)))
+         (if (keymapp maps) (list maps) maps)))
+
+(fset 'easy-menu-change (symbol-function 'add-menu))
+
+(defun easy-menu-add (menu &optional map)
+  "Add MENU to the current menu bar."
+  (cond ((null current-menubar)
+        ;; Don't add it to a non-existing menubar.
+        nil)
+       ((assoc (car menu) current-menubar)
+        ;; Already present.
+        nil)
+       ((equal current-menubar '(nil))
+        ;; Set at left if only contains right marker.
+        (set-buffer-menubar (list menu nil)))
+       (t
+        ;; Add at right.
+        (set-buffer-menubar (copy-sequence current-menubar))
+        (add-menu nil (car menu) (cdr menu)))))
+
+(defun easy-menu-remove (menu)
+  "Remove MENU from the current menu bar."
+  (and current-menubar
+       (assoc (car menu) current-menubar)
+       (delete-menu-item (list (car menu)))))
+
+(provide 'easymenu)
+
+;;; easymenu.el ends here
index 38ffe21..6a927a3 100644 (file)
@@ -5866,7 +5866,7 @@ the @code{Xref} header.
 If you want to lower the score of articles that have been crossposted to
 more than, say, 3 groups:
 @lisp
-("xref" (" +[^ ]+:[0-9]+ +[^ ]+:[0-9]+ +[^ ]+:[0-9]+" -1000 nil r))
+("xref" ("[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+" -1000 nil r))
 @end lisp
 @item Matching on the body
 This is generally not a very good idea - it takes a very long time.