-Mon Aug 28 05:09:47 1995 Lars Magne Ingebrigtsen <lingebri@sunsci4.cern.ch>
+Tue Aug 29 05:55:19 1995 Lars Magne Ingebrigtsen <lingebri@sunsci4.cern.ch>
+
+ * gnus-msg.el (gnus-delete-supersedes-headers): Delete
+ Supersedes.
+
+ * gnus-score.el (gnus-score-adaptive): Did not like matches on
+ numbers or dates.
+
+ * gnus.el (gnus-server-kill-server): Did not mark the dribble
+ buffer as changed.
+
+ * gnus-score.el (gnus-score-string): Did not do traces on fuzzy
+ scores.
+
+ * gnus.el (gnus-read-init-file): Run on load.
+
+ * gnus-cus.el (gnus-face-dark-name-list): Dark salmon isn't very
+ dark.
+
+ * gnus-msg.el (gnus-inews-insert-headers): Don't insert multiple
+ Original-Sender headers.
+
+ * gnus-vis.el (gnus-group-make-menu-bar): New submenu for editing
+ groups.
+
+ * gnus-msg.el (gnus-removable-headers): New variable.
+ (gnus-inews-remove-headers): Use it.
+
+Mon Aug 28 17:19:41 1995 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * custom.el (custom-help-button): Add `custom-jump' property.
+ (custom-forward-field): Ignore fields with `custom-jump' property.
+
+Mon Aug 28 13:59:04 1995 Lars Magne Ingebrigtsen <lingebri@sunsci4.cern.ch>
+
+ * gnus.el (gnus-newsrc-to-gnus-format): Would totally barf on
+ illegal group names.
+
+Mon Aug 28 05:09:47 1995 Lars Magne Ingebrigtsen <lingebri@sunscipw.cern.ch>
+
+ * gnus.el: 0.99.26 is released.
* nntp.el (nntp-send-region-to-server): Would hang.
(set-text-properties from (point)
(list 'face custom-button-face
mouse-face custom-mouse-face
+ 'custom-jump t ;Make TAB jump over it.
'custom-tag command))
(custom-category-set from (point) 'custom-documentation-properties))
(custom-help-insert ": " (custom-first-line (documentation command)) "\n"))
With optional ARG, move across that many fields."
(interactive "p")
(while (> arg 0)
- (setq arg (1- arg))
(let ((next (if (get-text-property (point) 'custom-tag)
(next-single-property-change (point) 'custom-tag)
(point))))
(next-single-property-change (point-min) 'custom-tag)))
(if next
(goto-char next)
- (error "No customization fields in this buffer."))))
+ (error "No customization fields in this buffer.")))
+ (or (get-text-property (point) 'custom-jump)
+ (setq arg (1- arg))))
(while (< arg 0)
- (setq arg (1+ arg))
(let ((previous (if (get-text-property (1- (point)) 'custom-tag)
(previous-single-property-change (point) 'custom-tag)
(point))))
(previous-single-property-change (point-max) 'custom-tag)))
(if previous
(goto-char previous)
- (error "No customization fields in this buffer.")))))
+ (error "No customization fields in this buffer.")))
+ (or (get-text-property (1- (point)) 'custom-jump)
+ (setq arg (1+ arg)))))
(defun custom-backward-field (arg)
"Move point to the previous field or button.
"turquoise"))
(defvar gnus-face-dark-name-list
- '("dark salmon" "firebrick"
+ '("blue" "firebrick"
"dark green" "dark orange" "dark khaki" "dark violet"
"dark turquoise"))
you want Gnus not to insert some header, remove it from this list.")
(defvar gnus-deletable-headers '(Message-ID Date)
- "*Headers to be deleted if they already exists.")
+ "*Headers to be deleted if they already exists and were generated by Gnus previously.")
+
+(defvar gnus-removable-headers '(NNTP-Posting-Host Bcc Xref)
+ "*Headers to be removed unconditionally before posting.")
(defvar gnus-check-before-posting
'(subject-cmsg multiple-headers sendsys message-id from
If this variable is t, Gnus will check everything it can. If it is a
list, then those elements in that list will be checked.")
-(defvar gnus-delete-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:"
+(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
any confusion.")
(progn
(erase-buffer)
(insert-buffer gnus-article-buffer)
- (goto-char (point-min))
- (search-forward "\n\n" nil t)
- (if (not (re-search-backward "^Message-ID: " nil t))
- (error "No Message-ID in this article")
- (replace-match "Supersedes: " t t))
- (search-forward "\n\n")
- (forward-line -1)
- (insert mail-header-separator)
-
- (forward-line -1)
+ (if (search-forward "\n\n" nil t)
+ (forward-char -1)
+ (goto-char (point-max)))
(narrow-to-region (point-min) (point))
(goto-char (point-min))
(and gnus-delete-supersedes-headers
(delete-matching-lines gnus-delete-supersedes-headers))
- (widen))))
+ (goto-char (point-min))
+ (if (not (re-search-forward "^Message-ID: " nil t))
+ (error "No Message-ID in this article")
+ (replace-match "Supersedes: " t t))
+ (goto-char (point-max))
+ (insert mail-header-separator)
+ (widen)
+ (forward-line 1))))
\f
;;;###autoload
(kill-buffer (current-buffer)))))))
(defun gnus-inews-remove-headers ()
- (let ((case-fold-search t))
- ;; Remove NNTP-posting-host.
- (goto-char (point-min))
- (and (re-search-forward "^nntp-posting-host:" nil t)
- (delete-region (progn (beginning-of-line) (point))
- (progn (forward-line 1) (point))))
- ;; Remove Bcc.
- (goto-char (point-min))
- (and (re-search-forward "^bcc:" nil t)
- (delete-region (progn (beginning-of-line) (point))
- (progn (forward-line 1) (point))))))
+ (let ((case-fold-search t)
+ (headers gnus-removable-headers))
+ ;; Remove toxic headers.
+ (while headers
+ (goto-char (point-min))
+ (and (re-search-forward
+ (concat "^" (downcase (format "%s" (car headers))))
+ nil t)
+ (delete-region (progn (beginning-of-line) (point))
+ (progn (forward-line 1) (point))))
+ (setq headers (cdr headers)))))
(defun gnus-inews-insert-headers ()
"Prepare article headers.
'(gnus-deletable t face italic) (current-buffer))))))
(setq headers (cdr headers)))
;; Insert new Sender if the From is strange.
- (let ((from (mail-fetch-field "from")))
- (if (and from (not (string=
- (downcase (car (gnus-extract-address-components
- from)))
- (downcase (gnus-inews-real-user-address)))))
+ (let ((from (mail-fetch-field "from"))
+ (sender (mail-fetch-field "sender")))
+ (if (and from
+ (not (string=
+ (downcase (car (gnus-extract-address-components from)))
+ (downcase (gnus-inews-real-user-address))))
+ (or (null sender)
+ (not
+ (string=
+ (downcase (car (gnus-extract-address-components sender)))
+ (downcase (gnus-inews-real-user-address))))))
(progn
(goto-char (point-min))
(and (re-search-forward "^Sender:" nil t)
(setq found (setq arts (get-text-property
(point) 'articles)))
;; Found a match, update scores.
- (while arts
- (setq art (car arts)
- arts (cdr arts))
- (setcdr art (+ score (cdr art))))))
+ (if trace
+ (while arts
+ (setq art (car arts)
+ arts (cdr arts))
+ (setcdr art (+ score (cdr art)))
+ (setq gnus-score-trace
+ (cons (cons (header-number
+ (car art)) kill)
+ gnus-score-trace)))
+ (while arts
+ (setq art (car arts)
+ arts (cdr arts))
+ (setcdr art (+ score (cdr art)))))))
(forward-line 1))
;; Update expire date
(cond ((null date)) ;Permanent entry.
(setq match (funcall (car (car elem)) headers))
(gnus-summary-score-entry
(nth 1 (car elem)) match
- ;; Whether we use substring or exact matches are controlled
- ;; here.
- (if (or (not gnus-score-exact-adapt-limit)
- (< (length match) gnus-score-exact-adapt-limit))
- 'e
- (if (equal (nth 1 (car elem)) "subject")
- 'f 's))
+ (cond
+ ((numberp match)
+ '=)
+ ((equal (nth 1 (car elem)) "date")
+ 'a)
+ (t
+ ;; Whether we use substring or exact matches are controlled
+ ;; here.
+ (if (or (not gnus-score-exact-adapt-limit)
+ (< (length match) gnus-score-exact-adapt-limit))
+ 'e
+ (if (equal (nth 1 (car elem)) "subject")
+ 'f 's))))
(nth 2 (car elem)) date nil t)
(setq elem (cdr elem))))
(forward-line 1)))))
["Kill all zombie groups" gnus-group-kill-all-zombies t])
("Foreign groups"
["Make a foreign group" gnus-group-make-group t]
- ["Edit a group entry" gnus-group-edit-group t]
["Add a directory group" gnus-group-make-directory-group t]
["Add the help group" gnus-group-make-help-group t]
["Add the archive group" gnus-group-make-archive-group t]
["Make a kiboze group" gnus-group-make-kiboze-group t]
["Make a virtual group" gnus-group-make-empty-virtual t]
["Add a group to a virtual" gnus-group-add-to-virtual t])
+ ("Editing groups"
+ ["Parameters" gnus-group-edit-group-parameters t]
+ ["Select method" gnus-group-edit-group-method t]
+ ["Info" gnus-group-edit-group t])
["Read a directory as a group" gnus-group-enter-directory t]
["Jump to group" gnus-group-jump-to-group t]
["Best unread group" gnus-group-best-unread-group t]
"gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
-(defconst gnus-version "(ding) Gnus v0.99.26"
+(defconst gnus-version "(ding) Gnus v0.99.27"
"Version number for this version of Gnus.")
(defvar gnus-info-nodes
(defvar gnus-reffed-article-number nil)
; Let the byte-compiler know that we know about this variable.
-(defvar rmail-default-file)
+(defvar rmail-default-rmail-file)
(defvar gnus-cache-removeable-articles nil)
(` (delete-region (progn (beginning-of-line) (point))
(progn (forward-line (, (or n 1))) (point)))))
+;; Suggested by Brian Edmonds <edmonds@cs.ubc.ca>.
+(defvar gnus-init-inhibit nil)
+(defun gnus-read-init-file (&optional inhibit-next)
+ (if gnus-init-inhibit
+ (setq gnus-init-inhibit nil)
+ (setq gnus-init-inhibit inhibit-next)
+ (and gnus-init-file
+ (or (and (file-exists-p gnus-init-file)
+ ;; Don't try to load a directory.
+ (not (file-directory-p gnus-init-file)))
+ (file-exists-p (concat gnus-init-file ".el"))
+ (file-exists-p (concat gnus-init-file ".elc")))
+ (load gnus-init-file nil t))))
+
+;;; Load the user startup file.
+(gnus-read-init-file 'inhibit)
+
;;; Load the compatability functions.
(require 'gnus-cus)
(setq fstring (buffer-substring 1 (point-max))))
(cons 'format (cons fstring (nreverse flist)))))
-;; Suggested by Brian Edmonds <edmonds@cs.ubc.ca>.
-(defun gnus-read-init-file ()
- (and gnus-init-file
- (or (and (file-exists-p gnus-init-file)
- ;; Don't try to load a directory.
- (not (file-directory-p gnus-init-file)))
- (file-exists-p (concat gnus-init-file ".el"))
- (file-exists-p (concat gnus-init-file ".elc")))
- (load gnus-init-file nil t)))
-
(defun gnus-set-work-buffer ()
(if (get-buffer gnus-work-buffer)
(progn
(defun gnus-header-id (header)
(header-id header))
+(defun gnus-header-message-id (header)
+ (header-id header))
+
+(defun gnus-header-chars (header)
+ (header-chars header))
+
(defun gnus-header-references (header)
(header-references header))
(put 'gnus-article-mode 'mode-class 'special)
+(defvar gnus-boogaboo nil)
+
(if gnus-article-mode-map
nil
(setq gnus-article-mode-map (make-keymap))
;; "Of" "Oh" "Ov" "Op" "Vu" "V\C-s" "V\C-r" "Vr" "V&" "VT" "Ve"
;; "VD" "Vk" "VK" "Vsn" "Vsa" "Vss" "Vsd" "Vsi"
)))
- (while (and nil commands) ; disabled
+ (while (and gnus-boogaboo commands) ; disabled
(define-key gnus-article-mode-map (car commands)
'gnus-article-summary-command)
(setq commands (cdr commands))))
(let ((commands (list "q" "Q" "c" "r" "R" "\C-c\C-f" "m" "a" "f" "F"
;; "Zc" "ZC" "ZE" "ZQ" "ZZ" "Zn" "ZR" "ZG" "ZN" "ZP"
"=" "n" "^" "\M-^")))
- (while (and nil commands) ; disabled
+ (while (and gnus-boogaboo commands) ; disabled
(define-key gnus-article-mode-map (car commands)
'gnus-article-summary-command-nosave)
(setq commands (cdr commands)))))
(or (gnus-server-goto-server server)
(if server (error "No such server: %s" server)
(error "No server on the current line")))
+ (gnus-dribble-enter "")
(let ((buffer-read-only nil))
(delete-region (progn (beginning-of-line) (point))
(progn (forward-line 1) (point))))
This function will be called narrowed to header of the article that is
being followed up.
+@item gnus-removable-headers
+@vindex gnus-removable-headers
+Some headers that are generated are toxic to the @sc{nntp} server.
+These include the @code{NNTP-Posting-Host}, @code{Bcc} and @code{Xref},
+so these headers are deleted if they are present in this list of
+symbols.
+
@item gnus-deletable-headers
@vindex gnus-deletable-headers
Headers in this list that were previously generated by Gnus will be
Score on the date.
@item l
Score on the number of lines.
+@item i
+Score on the Message-ID.
+@item f
+Score on followups.
@item b
Score on the body.
@item h
@end table
@item
-The third key is the match type.
+The third key is the match type. Which match types are legal depends on
+what headers you are scoring on.
+
+@table @code
+@item strings
+
@table @kbd
@item e
Exact matching.
Regexp matching
@end table
+@item date
+@table @kbd
+@item b
+Before date.
+@item a
+At date.
+@item n
+This date.
+@end table
+
+@item number
+@table @kbd
+@item <
+Less than number.
+@item =
+Equal to number.
+@item >
+Greater than number.
+@end table
+@end table
+
@item
The fourth and final key says whether this is a temporary (i.e., expiring)
score entry, or a permanent (i.e., non-expiring) score entry, or whether