+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.
-;; 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>
(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)
(require 'gnus)
(require 'sendmail)
(require 'gnus-ems)
-(require 'rmail)
(defvar gnus-organization-file "/usr/lib/news/organization"
"*Local news organization file.")
(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
(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
;;;
(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))
"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
(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)
(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)
;; 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
"-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.
(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)
(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))))
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)
(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)
(require 'sendmail)
(require 'nnheader)
+(eval-when-compile (require 'cl))
+
(eval-and-compile
(autoload 'news-setup "rnewspost")
(autoload 'news-reply-mode "rnewspost")
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 "")
(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)
(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)
--- /dev/null
+;;; 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
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.