+Sun Jul 14 18:21:14 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-uu.el (gnus-uu-mark-over): Would bug out.
+
+ * smiley.el (smiley-regexp-alist): New definition didn't work.
+
+Sun Jul 14 16:52:31 1996 Lars Magne Ingebrigtsen <larsi@hler.ifi.uio.no>
+
+ * gnus.el ((provide 'gnus)): Make sure `gnus-directory' is set
+ when compiling.
+
+Sun Jul 14 15:38:21 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el: autoload `gnus-copy-article-buffer'.
+
+ * message.el (message-do-send-housekeeping): Kill a superfluous
+ buffers.
+
+ * gnus-picon.el (gnus-article-display-picons): Don't bug out on
+ nil addresses.
+
+ * custom.el ((fboundp 'plist-get)): Removed.
+ ((fboundp 'add-to-list)): Removed.
+
+Sun Jul 14 15:30:27 1996 Martin Buchholz <mrb@eng.sun.com>
+
+ * gnus.el: Many typo fixes.
+
+Thu Jul 11 18:06:24 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el (nntp-retrieve-headers-with-xover):
+ `accept-process-output' from `nntp-server-process'.
+
+Tue Jul 9 07:51:31 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * gnus-vis.el (gnus-group-make-menu-bar): Un-randomize.
+
+Mon Jul 8 09:53:39 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * gnus.el (gnus-decode-rfc1522): Goto point-min before decoding.
+
+Mon Jul 8 08:53:50 1996 Nat Makarevitch <nat@nataa.fr.eu.org>
+
+ * smiley.el (smiley-regexp-alist): New definition.
+
+Sun Jul 7 13:33:44 1996 Sudish Joseph <sudish@mindspring.com>
+
+ * nnmail.el (nnmail-split-fancy-syntax-table): `%' should have
+ punctuation syntax to support the %-hack in addresses.
+
+Sat Jul 6 08:11:41 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * gnus.el: Gnus v5.2.34 is released.
+
Sat Jul 6 05:46:12 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
* nnheader.el (nnheader-re-read-dir): Would sometimes bug out.
(custom-set-text-properties 0 (length string) nil string)
string))
-(or (fboundp 'add-to-list)
- ;; Introduced in Emacs 19.29.
- (defun add-to-list (list-var element)
- "Add to the value of LIST-VAR the element ELEMENT if it isn't there yet.
-If you want to use `add-to-list' on a variable that is not defined
-until a certain package is loaded, you should put the call to `add-to-list'
-into a hook function that will be run only after loading the package.
-`eval-after-load' provides one way to do this. In some cases
-other hooks, such as major mode hooks, can do the job."
- (or (member element (symbol-value list-var))
- (set list-var (cons element (symbol-value list-var))))))
-
-(or (fboundp 'plist-get)
- ;; Introduced in Emacs 19.29.
- (defun plist-get (plist prop)
- "Extract a value from a property list.
-PLIST is a property list, which is a list of the form
-\(PROP1 VALUE1 PROP2 VALUE2...). This function returns the value
-corresponding to the given PROP, or nil if PROP is not
-one of the properties on the list."
- (let (result)
- (while plist
- (if (eq (car plist) prop)
- (setq result (car (cdr plist))
- plist nil)
- (set plist (cdr (cdr plist)))))
- result)))
-
-(or (fboundp 'plist-put)
- ;; Introduced in Emacs 19.29.
- (defun plist-put (plist prop val)
- "Change value in PLIST of PROP to VAL.
-PLIST is a property list, which is a list of the form
-\(PROP1 VALUE1 PROP2 VALUE2 ...). PROP is a symbol and VAL is any object.
-If PROP is already a property on the list, its value is set to VAL,
-otherwise the new PROP VAL pair is added. The new plist is returned;
-use `(setq x (plist-put x prop val))' to be sure to use the new value.
-The PLIST is modified by side effects."
- (if (null plist)
- (list prop val)
- (let ((current plist))
- (while current
- (cond ((eq (car current) prop)
- (setcar (cdr current) val)
- (setq current nil))
- ((null (cdr (cdr current)))
- (setcdr (cdr current) (list prop val))
- (setq current nil))
- (t
- (setq current (cdr (cdr current)))))))
- plist)))
-
-(or (fboundp 'match-string)
- ;; Introduced in Emacs 19.29.
- (defun match-string (num &optional string)
- "Return string of text matched by last search.
-NUM specifies which parenthesized expression in the last regexp.
- Value is nil if NUMth pair didn't match, or there were less than NUM pairs.
-Zero means the entire text matched by the whole regexp or whole string.
-STRING should be given if the last search was by `string-match' on STRING."
- (if (match-beginning num)
- (if string
- (substring string (match-beginning num) (match-end num))
- (buffer-substring (match-beginning num) (match-end num))))))
-
-(or (fboundp 'facep)
- ;; Introduced in Emacs 19.29.
- (defun facep (x)
- "Return t if X is a face name or an internal face vector."
- (and (or (and (fboundp 'internal-facep) (internal-facep x))
- (and
- (symbolp x)
- (assq x (and (boundp 'global-face-data) global-face-data))))
- t)))
-
;; XEmacs and Emacs 19.29 facep does different things.
(if (fboundp 'find-face)
(fset 'custom-facep 'find-face)
(not (eq gnus-use-cache 'passive))))
(gnus-cache-read-active)))
-(gnus-add-shutdown 'gnus-cache-close 'gnus)
+(condition-case ()
+ (gnus-add-shutdown 'gnus-cache-close 'gnus)
+ ;; Complexities of byte-compiling makes this kludge necessary. Eeek.
+ (error nil))
(defun gnus-cache-close ()
"Shut down the cache."
regular expression that should match the beginning of the header line,
but if you don't know what a regular expression is, just write the
name of the header. The second field is the `Name' field, which
-determines how the the header name (i.e. the part of the header left
+determines how the header name (i.e. the part of the header left
of the `:') is displayed. The third field is the `Content' field,
which determines how the content (i.e. the part of the header right of
the `:') is displayed.
Several score files may apply to each group, and several groups may
use the same score file. This is controlled implicitly by the name of
the score file and the value of the global variable
-`gnus-score-find-score-files-function', and explicitly by the the
+`gnus-score-find-score-files-function', and explicitly by the
`Files' and `Exclude Files' entries.")
(compact . t)
(type . group)
((name . files)
(tag . "Files")
(doc . "\
-List of score files to load when the the current score file is loaded.
+List of score files to load when the current score file is loaded.
You can use this to share score entries between multiple score files.
Push the `[INS]' button add a score file to the list, or `[DEL]' to
((name . exclude-files)
(tag . "Exclude Files")
(doc . "\
-List of score files to exclude when the the current score file is loaded.
+List of score files to exclude when the current score file is loaded.
You can use this if you have a score file you want to share between a
number of newsgroups, except for the newsgroup this score file
matches. [ Did anyone get that? ]
entry. After choosing the you can enter the date the score entry was
last matched in the `Date' field. The date will be automatically
updated each time the score entry matches an article. When the date
-become too old, the the score entry will be removed.
+become too old, the score entry will be removed.
For your convenience, the date is specified as the number of days
elapsed since the (imaginary) Gregorian date Sunday, December 31, 1
(doc . "Customization of adaptive scoring.
Each time you read an article it will be marked as read. Likewise, if
-you delete it it will be marked as deleted, and if you tick it it will
+you delete it, it will be marked as deleted, and if you tick it, it will
be marked as ticked. When you leave a group, GNUS can automatically
create score file entries based on these marks, so next time you enter
the group articles with subjects that you read last time have higher
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defvar gnus-summary-grouplens-line-format
- "%U%R%z%l%I%(%[%4L: %-20,20n%]%) %s\n"
+ "%U\%R\%z%l%I\%(%[%4L: %-20,20n%]%) %s\n"
"*The line format spec in summary GroupLens mode buffers.")
(defvar grouplens-pseudonym ""
(when (and (featurep 'xpm)
(or (not (fboundp 'device-type)) (equal (device-type) 'x))
(setq from (mail-fetch-field "from"))
- (setq from (downcase (cadr (mail-extract-address-components
- from)))
+ (setq from (downcase (or (cadr (mail-extract-address-components
+ from))
+ ""))
at-idx (string-match "@" from)))
(save-excursion
(let ((username (substring from 0 at-idx))
(if mimic (error "%c %c" prefix hchar) (error "")))
(when (/= (downcase tchar) tchar)
- ;; It was a majuscle, so we end reading and the the default.
+ ;; It was a majuscle, so we end reading and use the default.
(if mimic (message "%c %c %c" prefix hchar tchar)
(message ""))
(setq pchar (or pchar ?p)))
(data gnus-newsgroup-data))
(save-excursion
(while data
- (when (> (or (cdr (assq (gnus-data-number (caar data))
+ (when (> (or (cdr (assq (gnus-data-number (car data))
gnus-newsgroup-scored))
gnus-summary-default-score 0)
score)
;; If the list returned contains a `begin', the first element of
;; the list *must* be a string with the file name of the decoded
;; file.
-;; `end' if the the end of an encoded file has been received
+;; `end' if the end of an encoded file has been received
;; `middle' if the article was a body part of an encoded file
;; `wrong-type' if the article was not a part of an encoded file
;; `ok', which can be used everything is ok
;; Kills the temporary uu buffers, kills any processes, etc.
(defun gnus-uu-clean-up ()
- (let (buf pst)
+ (let (buf)
(and gnus-uu-uudecode-process
(memq (process-status (or gnus-uu-uudecode-process "nevair"))
'(stop run))
["Execute command" gnus-group-universal-argument
(or gnus-group-marked (gnus-group-group-name))])
("Subscribe"
- ["Subscribe to random group" gnus-group-unsubscribe-group t]
+ ["Subscribe to a group" gnus-group-unsubscribe-group t]
["Kill all newsgroups in region" gnus-group-kill-region t]
["Kill all zombie groups" gnus-group-kill-all-zombies
gnus-zombie-list]
(defvar gnus-insert-pseudo-articles t
"*If non-nil, insert pseudo-articles when decoding articles.")
-(defvar gnus-group-line-format "%M%S%p%P%5y: %(%g%)%l\n"
+(defvar gnus-group-line-format "%M\%S\%p\%P\%5y: %(%g%)%l\n"
"*Format of group lines.
It works along the same lines as a normal formatting string,
with some simple extensions.
of these specs, you must probably re-start Gnus to see them go into
effect.")
-(defvar gnus-summary-line-format "%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n"
+(defvar gnus-summary-line-format "%U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n"
"*The format specification of the lines in the summary buffer.
It works along the same lines as a normal formatting string,
"*The format specification for the article mode line.
See `gnus-summary-mode-line-format' for a closer description.")
-(defvar gnus-group-mode-line-format "Gnus: %%b {%M%:%S}"
+(defvar gnus-group-mode-line-format "Gnus: %%b {%M\%:%S}"
"*The format specification for the group mode line.
It works along the same lines as a normal formatting string,
with some simple extensions:
("nnfolder" mail respool address))
"An alist of valid select methods.
The first element of each list lists should be a string with the name
-of the select method. The other elements may be be the category of
+of the select method. The other elements may be the category of
this method (ie. `post', `mail', `none' or whatever) or other
properties that this method has (like being respoolable).
If you implement a new select method, all you should have to change is
"gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
-(defconst gnus-version-number "5.2.34"
+(defconst gnus-version-number "5.2.35"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Gnus v%s" gnus-version-number)
gnus-uu-decode-binhex-view)
("gnus-msg" (gnus-summary-send-map keymap)
gnus-mail-yank-original gnus-mail-send-and-exit
- gnus-article-mail gnus-new-mail gnus-mail-reply)
+ gnus-article-mail gnus-new-mail gnus-mail-reply
+ gnus-copy-article-buffer)
("gnus-msg" :interactive t
gnus-group-post-news gnus-group-mail gnus-summary-post-news
gnus-summary-followup gnus-summary-followup-with-original
(goto-char (point-min))
(gnus-group-position-point)))
-;; Suggested by by Daniel Quinlan <quinlan@best.com>.
+;; Suggested by Daniel Quinlan <quinlan@best.com>.
(defun gnus-group-apropos (regexp &optional search-description)
"List all newsgroups that have names that match a regexp."
(interactive "sGnus apropos (regexp): ")
(while threads
(setq sub (car threads))
(if (stringp (car sub))
- ;; This is a gathered threads, so we look at the roots
- ;; below it to find whether this article in in this
+ ;; This is a gathered thread, so we look at the roots
+ ;; below it to find whether this article is in this
;; gathered root.
(progn
(setq sub (cdr sub))
(goto-char (point-min))
(or (search-forward "\n\n" nil t) (point-max)))
+ (goto-char (point-min))
(while (re-search-forward
"=\\?iso-8859-1\\?q\\?\\([^?\t\n]*\\)\\?=" nil t)
(setq string (match-string 1))
(gnus-group-change-level entry gnus-level-killed)
(setq gnus-killed-list (delete group gnus-killed-list))))
;; Then we remove all bogus groups from the list of killed and
- ;; zombie groups. They are are removed without confirmation.
+ ;; zombie groups. They are removed without confirmation.
(let ((dead-lists '(gnus-killed-list gnus-zombie-list))
killed)
(while dead-lists
;; We want to inline a function from gnus-cache, so we cheat here:
(eval-when-compile
(provide 'gnus)
+ (setq gnus-directory (or (getenv "SAVEDIR") "~/News/"))
(require 'gnus-cache))
(defun gnus-get-unread-articles-in-group (info active &optional update)
(setq lists (cdr lists)))))
(defun gnus-get-killed-groups ()
- "Go through the active hashtb and all all unknown groups as killed."
+ "Go through the active hashtb and mark all unknown groups as killed."
;; First make sure active file has been read.
(unless (gnus-read-active-file-p)
(let ((gnus-read-active-file t))
(save-excursion
(set-buffer tembuf)
(erase-buffer)
- (insert-buffer-substring mailbuf)
+ ;; Avoid copying text props.
+ (insert (format "%s" (buffer-string nil nil mailbuf)))
;; Remove some headers.
(save-restriction
(message-narrow-to-headers)
(set-buffer tembuf)
(buffer-disable-undo (current-buffer))
(erase-buffer)
- (insert-buffer-substring messbuf)
+ ;; Avoid copying text props.
+ (insert (format "%s" (buffer-string nil nil messbuf)))
;; Remove some headers.
(save-restriction
(message-narrow-to-headers)
;; We might have sent this buffer already. Delete it from the
;; list of buffers.
(setq message-buffer-list (delq (current-buffer) message-buffer-list))
- (when (and message-max-buffers
- (>= (length message-buffer-list) message-max-buffers))
+ (while (and message-max-buffers
+ (>= (length message-buffer-list) message-max-buffers))
;; Kill the oldest buffer -- unless it has been changed.
(let ((buffer (pop message-buffer-list)))
(when (and (buffer-name buffer)
(if (eq (following-char) (char-after (- (point) 2)))
(delete-char -2))))))
-(fset 'message-exchange-point-and-mark 'exchange-point-and-mark)
+(defalias 'message-exchange-point-and-mark 'exchange-point-and-mark)
;; Support for toolbar
(when (string-match "XEmacs\\|Lucid" emacs-version)
(defvar nnmail-pop-password nil
"*Password to use when reading mail from a POP server, if required.")
-(defvar nnmail-split-fancy-syntax-table
- (copy-syntax-table (standard-syntax-table))
+(defvar nnmail-split-fancy-syntax-table nil
"Syntax table used by `nnmail-split-fancy'.")
+(unless (syntax-table-p nnmail-split-fancy-syntax-table)
+ (setq nnmail-split-fancy-syntax-table
+ (copy-syntax-table (standard-syntax-table)))
+ ;; support the %-hack
+ (modify-syntax-entry ?\% "." nnmail-split-fancy-syntax-table))
+
(defvar nnmail-prepare-save-mail-hook nil
"Hook called before saving mail.")
(defvoo nntp-rlogin-user-name nil
"*User name on remote system when using the rlogin connect method.")
-(defvoo nntp-telnet-parameters '("exec" "telnet" "${NNTPSERVER:=localhost}" "nntp")
+(defvoo nntp-telnet-parameters '("exec" "telnet" "-8" "${NNTPSERVER:=localhost}" "nntp")
"*Parameters to `nntp-open-telnet'.
That function may be used as `nntp-open-server-function'. In that
case, this list will be executed as a command after logging in
(defvoo nntp-end-of-line "\r\n"
"String to use on the end of lines when talking to the NNTP server.
This is \"\\r\\n\" by default, but should be \"\\n\" when
-using rlogin to communicate with the server.")
+using rlogin or telnet to communicate with the server.")
(defvoo nntp-large-newsgroup 50
"*The number of the articles which indicates a large newsgroup.
(save-excursion
;; Replace `.' at beginning of line with `..'.
(goto-char (point-min))
- (while (search-forward "\n." nil t)
+ (while (re-search-forward "^\\." nil t)
(insert "."))
(goto-char (point-max))
;; Insert newline at end of buffer.
(or (bolp) (insert "\n"))
+ ;(goto-char (point-min))
+ ;(while (not (eobp))
+ ; (end-of-line)
+ ; (insert "\r")
+ ; (forward-line 1))
;; Insert `.' at end of buffer (end of text mark).
+ (goto-char (point-max))
(insert "." nntp-end-of-line)))
+
\f
;;;
;;; Synchronous Communication with NNTP servers.
;; order to avoid deadlocks.
(when (or (null articles) ;All requests have been sent.
(zerop (% count nntp-maximum-request)))
- (accept-process-output)
+ (accept-process-output nntp-server-process)
;; On some Emacs versions the preceding function has
;; a tendency to change the buffer. Perhaps. It's
;; quite difficult to reproduce, because it only
(setq received (1+ received)))
(setq last-point (point))
(< received count))
- (accept-process-output)
+ (accept-process-output nntp-server-process)
(set-buffer buf)))))
(when nntp-server-xover
(defun nntp-open-server-semi-internal (server &optional service)
"Open SERVER.
If SERVER is nil, use value of environment variable `NNTPSERVER'.
-If SERVICE, this this as the port number."
+If SERVICE, use this as the port number."
(nnheader-insert "")
(let ((server (or server (getenv "NNTPSERVER")))
(status nil)
(let ((buf (current-buffer)))
(goto-char (point-min))
(while (not (re-search-forward regexp nil t))
- (accept-process-output)
- (sit-for 1)
+ (accept-process-output nntp-server-process)
(set-buffer buf)
(goto-char (point-min)))))
(set-buffer nntp-server-buffer)
(erase-buffer)
(let ((proc (start-process
- "nntpd" nntp-server-buffer "telnet"))
+ "nntpd" nntp-server-buffer "telnet" "-8"))
(case-fold-search t))
(when (memq (process-status proc) '(open run))
(process-send-string proc "set escape \^X\n")
(beginning-of-line)
(delete-region (point-min) (point))
(process-send-string proc "\^]")
+ (nntp-wait-for-string "^telnet")
(process-send-string proc "mode character\n")
- (sit-for 2)
+ (accept-process-output proc 1)
+ (sit-for 1)
+ (goto-char (point-min))
(forward-line 1)
(delete-region (point) (point-max)))
proc)))
"Location of the smiley faces files.")
(defvar smiley-regexp-alist
- '(("\\s-\\(:-*\\]\\)\\W" 1 "FaceGrinning.xpm")
- ("\\s-\\(:-*[oO]\\)\\W" 1 "FaceStartled.xpm")
- ("\\s-\\(:-*[)>]\\)" 1 "FaceHappy.xpm")
- ("\\s-\\(;-*[>)]\\)" 1 "FaceWinking.xpm")
- ("\\s-\\(:-[/\\]\\)" 1 "FaceIronic.xpm")
- ("\\s-\\(:-*|\\)" 1 "FaceStraight.xpm")
- ("\\s-\\(:-*<\\)" 1 "FaceAngry.xpm")
- ("\\s-\\(:-*d\\)\\W" 1 "FaceTasty.xpm")
- ("\\s-\\(:-*[pP]\\)\\W" 1 "FaceYukky.xpm")
- ("\\s-\\(8-*|\\)" 1 "FaceKOed.xpm")
- ("\\s-\\(:-*(\\)" 1 "FaceAngry.xpm"))
+ '(("\\(:-*[<«]+\\)\\W" 1 "FaceAngry.xpm")
+ ("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm")
+ ("\\(:-*D\\)\\W" 1 "FaceGrinning.xpm")
+ ("\\(:-*[)>}»]+\\)\\W" 1 "FaceHappy.xpm")
+ ("\\(:-*[/\\\"]+\\)\\W" 1 "FaceIronic.xpm")
+ ("\\([8|]-*[|Oo%]\\)\\W" 1 "FaceKOed.xpm")
+ ("\\([:|]-*#+\\)\\W" 1 "FaceNyah.xpm")
+ ("\\(:-*[({]+\\)\\W" 1 "FaceSad.xpm")
+ ("\\(:-*[Oo\*]\\)\\W" 1 "FaceStartled.xpm")
+ ("\\(:-*|\\)\\W" 1 "FaceStraight.xpm")
+ ("\\(:-*p\\)\\W" 1 "FaceTalking.xpm")
+ ("\\(:-*d\\)\\W" 1 "FaceTasty.xpm")
+ ("\\(;-*[>)}»]+\\)\\W" 1 "FaceWinking.xpm")
+ ("\\(:-*[Vvµ]\\)\\W" 1 "FaceWry.xpm")
+ ("\\([:|]-*P\\)\\W" 1 "FaceYukky.xpm"))
"A list of regexps to map smilies to real images.")
(defvar smiley-flesh-color "yellow"
$(LATEX) refcard.tex
clean:
- rm -f gnus.*.bak gnus.ky gnus.cp gnus.fn gnus.cps gnus.kys \
+ rm -f gnus.*.bak gnus.ky gnus.cp gnus.fn gnus.cps gnus.kys *.log \
gnus.log gnus.pg gnus.tp gnus.vr gnus.toc gnus.latexi *.aux gnus.cidx \
gnus.cind gnus.ilg gnus.ind gnus.kidx gnus.kind gnus.idx \
gnus.tmptexi gnus.tmplatexi *.latexi texput.log *.orig *.rej
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't 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, ``found this
+function indispensable'', however.)
@item Head, Body, All
These three match keys use the same match types as the @code{From} (etc)