-Tue Jul 11 09:36:28 1995 Lars Magne Ingebrigtsen <lingebri@sunscipw.cern.ch>
+Thu Jul 13 00:14:09 1995 Lars Magne Ingebrigtsen <lingebri@sunscipw.cern.ch>
+
+ * nndoc.el (nndoc-type-to-regexp): Some digests do not start with
+ the required over-long --- line.
+
+ * gnus.el (gnus-article-prepare): Didn't set gnus-have-all-headers
+ in the right buffer.
+ (gnus-read-mark): Swicthed marks around.
+ (gnus-summary-next-group): Would barf on unactivated groups.
+
+ * gnus-vis.el (gnus-visual-score-map): Turn score menus off.
+
+Wed Jul 12 21:02:22 1995 Lars Magne Ingebrigtsen <lingebri@sunscipw.cern.ch>
+
+ * gnus.el (gnus-save-newsrc-file): Allow backups of files.
+ (gnus-gnus-to-newsrc-format): Ditto.
+ (gnus-article-mode-map): Don't use summary buffer def for return.
+
+ * gnus-ems.el: set-text-properties did not work for XEmacs.
+
+ * gnus-uu.el (gnus-uu-initialize): Don't check for generated files
+ - this would delete any previously decoded files.
+ (gnus-uu-output-buffer-name): Changed name.
+ (gnus-uu-initialize): Maintain an alist of tmp dirs.
+
+ * gnus.el (gnus-group-search-forward): Would also find group with
+ a lower level than LEVEL.
+
+ * nntp.el: `telnet' was autoloaded as a non-interactive function.
+
+ * gnus.el (gnus-summary-next-group): Configure windows properly on
+ `C-g'.
+ (gnus-summary-refer-article): Make sure overlays are copied by
+ renaming the buffer.
+
+ * gnus-msg.el (gnus-inews-insert-mime-headers): Bind
+ mail-header-separator to "".
+
+Tue Jul 11 16:38:32 1995 Lars Magne Ingebrigtsen <lingebri@sunscipw.cern.ch>
+
+ * gnus.el (gnus-summary-exit): Run the exit hook before updating
+ info.
+
+Tue Jul 11 09:36:28 1995 Lars Magne Ingebrigtsen <lingebri@sunsci4.cern.ch>
+
+ * gnus.el: 0.94 is released.
* gnus-msg.el (gnus-debug): A `sit-for' may sometimes change
active buffer.
+ * nn*.el: Fix in expire article which would nix out the active
+ file.
+
* gnus-ems.el (gnus-ems-redefine): Mule redefinition.
* gnus.el (gnus-summary-respool-article): Didn't allow respooling.
-
* gnus-uu.el (gnus-uu-command): Also escape !s.
(condition-case nil (set-face-foreground face foreground) (error nil))
(condition-case nil (set-face-background face background) (error nil))
(condition-case nil (set-face-stipple face stipple) (error nil))
- (funcall (if bold-p 'make-face-bold 'make-face-unbold) face nil t)
- (funcall (if italic-p 'make-face-italic 'make-face-unitalic) face nil t)
+ (if (string-match "XEmacs" emacs-version)
+ (progn
+ (funcall (if bold-p 'make-face-bold 'make-face-unbold) face)
+ (funcall (if italic-p 'make-face-italic 'make-face-unitalic) face))
+ (funcall (if bold-p 'make-face-bold 'make-face-unbold) face nil t)
+ (funcall (if italic-p 'make-face-italic 'make-face-unitalic) face nil t))
(set-face-underline-p face underline-p)
(and (interactive-p) (redraw-display))))
(defun set-text-properties (start end props &optional buffer)
(if (or (null buffer) (bufferp buffer))
(if props
- (put-text-property start end (car props) (cdr props) buffer)
+ (while props
+ (put-text-property
+ start end (car props) (nth 1 props) buffer)
+ (setq props (nthcdr 2 props)))
(remove-text-properties start end ())))))
(defvar gnus-header-face-alist
(gnus-article-show-all-headers);; so colors are happy
;; lots of junk to avoid mh-send deleting other windows
- (setq from (gnus-fetch-field "from")
+ (setq from (or (gnus-fetch-field "from") "")
subject (let ((subject (or (gnus-fetch-field "subject")
"(None)")))
(if (and subject
;; Written by "Mr. Per Persson" <pp@solace.mh.se>.
(defun gnus-inews-insert-mime-headers ()
- (or (mail-position-on-field "Mime-Version")
- (insert "1.0")
- (cond ((save-excursion
- (beginning-of-buffer)
- (re-search-forward "[\200-\377]" nil t))
- (or (mail-position-on-field "Content-Type")
- (insert "text/plain; charset=ISO-8859-1"))
- (or (mail-position-on-field "Content-Transfer-Encoding")
- (insert "8bit")))
- (t (or (mail-position-on-field "Content-Type")
- (insert "text/plain; charset=US-ASCII"))
- (or (mail-position-on-field "Content-Transfer-Encoding")
- (insert "7bit"))))))
+ (let ((mail-header-separator ""))
+ (or (mail-position-on-field "Mime-Version")
+ (insert "1.0")
+ (cond ((save-excursion
+ (beginning-of-buffer)
+ (re-search-forward "[\200-\377]" nil t))
+ (or (mail-position-on-field "Content-Type")
+ (insert "text/plain; charset=ISO-8859-1"))
+ (or (mail-position-on-field "Content-Transfer-Encoding")
+ (insert "8bit")))
+ (t (or (mail-position-on-field "Content-Type")
+ (insert "text/plain; charset=US-ASCII"))
+ (or (mail-position-on-field "Content-Transfer-Encoding")
+ (insert "7bit")))))))
(defun gnus-inews-do-fcc ()
"Process FCC: fields in current article buffer.
(defvar gnus-uu-generated-file-list nil)
(defvar gnus-uu-work-dir nil)
-(defconst gnus-uu-output-buffer-name "*Gnus UU Output*")
+(defconst gnus-uu-output-buffer-name " *Gnus UU Output*")
(defconst gnus-uu-highest-article-number 1)
(defvar gnus-uu-default-dir default-directory)
(insert (make-string (- length (- (point) beg)) ? ))))
(forward-line 1))))))
+(defvar gnus-uu-tmp-alist nil)
+
(defun gnus-uu-initialize ()
- (setq gnus-uu-highest-article-number 1)
- (gnus-uu-check-for-generated-files)
- (setq gnus-uu-tmp-dir (file-name-as-directory
- (expand-file-name gnus-uu-tmp-dir)))
-
- (if (not (file-directory-p gnus-uu-tmp-dir))
- (error "Temp directory %s doesn't exist" gnus-uu-tmp-dir)
- (if (not (file-writable-p gnus-uu-tmp-dir))
- (error "Temp directory %s can't be written to" gnus-uu-tmp-dir)))
-
- (setq gnus-uu-work-dir
- (make-temp-name (concat gnus-uu-tmp-dir "gnus")))
- (gnus-uu-add-file gnus-uu-work-dir)
- (if (not (file-directory-p gnus-uu-work-dir))
- (gnus-make-directory gnus-uu-work-dir))
- (set-file-modes gnus-uu-work-dir 448)
- (setq gnus-uu-work-dir (file-name-as-directory gnus-uu-work-dir)))
+ (let (entry)
+ (if (if (setq entry (assoc gnus-newsgroup-name gnus-uu-tmp-alist))
+ (if (file-exists-p (cdr entry))
+ (setq gnus-uu-work-dir (cdr entry))
+ (setq gnus-uu-tmp-alist (delq entry gnus-uu-tmp-alist))
+ nil))
+ t
+ (setq gnus-uu-highest-article-number 1)
+ (setq gnus-uu-tmp-dir (file-name-as-directory
+ (expand-file-name gnus-uu-tmp-dir)))
+ (if (not (file-directory-p gnus-uu-tmp-dir))
+ (error "Temp directory %s doesn't exist" gnus-uu-tmp-dir)
+ (if (not (file-writable-p gnus-uu-tmp-dir))
+ (error "Temp directory %s can't be written to"
+ gnus-uu-tmp-dir)))
+
+ (setq gnus-uu-work-dir
+ (make-temp-name (concat gnus-uu-tmp-dir "gnus")))
+ (gnus-uu-add-file gnus-uu-work-dir)
+ (if (not (file-directory-p gnus-uu-work-dir))
+ (gnus-make-directory gnus-uu-work-dir))
+ (set-file-modes gnus-uu-work-dir 448)
+ (setq gnus-uu-work-dir (file-name-as-directory gnus-uu-work-dir))
+ (setq gnus-uu-tmp-alist (cons (cons gnus-newsgroup-name gnus-uu-work-dir)
+ gnus-uu-tmp-alist)))))
+
;; Kills the temporary uu buffers, kills any processes, etc.
(defun gnus-uu-clean-up ()
)
(defun gnus-visual-score-map (type)
- (let ((headers '(("author" "from" string)
- ("subject" "subject" string)
- ("article body" "body" string)
- ("article head" "head" string)
- ("xref" "xref" string)
- ("lines" "lines" number)
- ("followups to author" "followup" string)))
- (types '((number ("less than" <)
- ("greater than" >)
- ("equal" =))
- (string ("substring" s)
- ("exact string" e)
- ("fuzzy string" f)
- ("regexp" r))))
- (perms '(("temporary" (current-time-string))
- ("permanent" nil)
- ("immediate" now)))
- header)
- (list
- (apply
- 'nconc
- (list
- (if (eq type 'lower)
- "Lower score"
- "Increase score"))
- (let (outh)
- (while headers
- (setq header (car headers))
- (setq outh
- (cons
- (apply
- 'nconc
- (list (car header))
- (let ((ts (cdr (assoc (nth 2 header) types)))
- outt)
- (while ts
- (setq outt
- (cons
- (apply
- 'nconc
- (list (car (car ts)))
- (let ((ps perms)
- outp)
- (while ps
- (setq outp
- (cons
- (vector
- (car (car ps))
- (list
- 'gnus-summary-score-entry
- (nth 1 header)
- (if (or (string= (nth 1 header) "head")
- (string= (nth 1 header) "body"))
- ""
- (list 'gnus-summary-header
- (nth 1 header)))
- (list 'quote (nth 1 (car ts)))
- (list 'gnus-score-default nil)
- (nth 1 (car ps))
- t)
- t)
- outp))
- (setq ps (cdr ps)))
- (list (nreverse outp))))
- outt))
- (setq ts (cdr ts)))
- (list (nreverse outt))))
- outh))
- (setq headers (cdr headers)))
- (list (nreverse outh)))))))
+ (if t
+ nil
+ (let ((headers '(("author" "from" string)
+ ("subject" "subject" string)
+ ("article body" "body" string)
+ ("article head" "head" string)
+ ("xref" "xref" string)
+ ("lines" "lines" number)
+ ("followups to author" "followup" string)))
+ (types '((number ("less than" <)
+ ("greater than" >)
+ ("equal" =))
+ (string ("substring" s)
+ ("exact string" e)
+ ("fuzzy string" f)
+ ("regexp" r))))
+ (perms '(("temporary" (current-time-string))
+ ("permanent" nil)
+ ("immediate" now)))
+ header)
+ (list
+ (apply
+ 'nconc
+ (list
+ (if (eq type 'lower)
+ "Lower score"
+ "Increase score"))
+ (let (outh)
+ (while headers
+ (setq header (car headers))
+ (setq outh
+ (cons
+ (apply
+ 'nconc
+ (list (car header))
+ (let ((ts (cdr (assoc (nth 2 header) types)))
+ outt)
+ (while ts
+ (setq outt
+ (cons
+ (apply
+ 'nconc
+ (list (car (car ts)))
+ (let ((ps perms)
+ outp)
+ (while ps
+ (setq outp
+ (cons
+ (vector
+ (car (car ps))
+ (list
+ 'gnus-summary-score-entry
+ (nth 1 header)
+ (if (or (string= (nth 1 header)
+ "head")
+ (string= (nth 1 header)
+ "body"))
+ ""
+ (list 'gnus-summary-header
+ (nth 1 header)))
+ (list 'quote (nth 1 (car ts)))
+ (list 'gnus-score-default nil)
+ (nth 1 (car ps))
+ t)
+ t)
+ outp))
+ (setq ps (cdr ps)))
+ (list (nreverse outp))))
+ outt))
+ (setq ts (cdr ts)))
+ (list (nreverse outt))))
+ outh))
+ (setq headers (cdr headers)))
+ (list (nreverse outh))))))))
;; Article buffer
(defun gnus-article-make-menu-bar ()
(define-key gnus-carpal-mode-map gnus-mouse-2 'gnus-carpal-mouse-select))
(defun gnus-carpal-mode ()
- "Major mode clicking buttons.
+ "Major mode for clicking buttons.
All normal editing commands are switched off.
\\<gnus-carpal-mode-map>
"*Mark used for ticked articles.")
(defvar gnus-dormant-mark ??
"*Mark used for dormant articles.")
-(defvar gnus-del-mark ?D
+(defvar gnus-del-mark ?r
"*Mark used for del'd articles.")
-(defvar gnus-read-mark ?d
+(defvar gnus-read-mark ?R
"*Mark used for read articles.")
(defvar gnus-expirable-mark ?E
"*Mark used for expirable articles.")
"*Mark used for articles with a low score.")
(defvar gnus-catchup-mark ?C
"*Mark used for articles that are caught up.")
-(defvar gnus-replied-mark ?R
+(defvar gnus-replied-mark ?A
"*Mark used for articles that have been replied to.")
(defvar gnus-process-mark ?#
"*Process mark.")
-(defvar gnus-ancient-mark ?A
+(defvar gnus-ancient-mark ?O
"*Mark used for ancient articles.")
(defvar gnus-canceled-mark ?G
"*Mark used for canceled articles.")
(defconst gnus-maintainer "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
-(defconst gnus-version "(ding) Gnus v0.94"
+(defconst gnus-version "(ding) Gnus v0.95"
"Version number for this version of Gnus.")
(defvar gnus-info-nodes
(point) 'gnus-level)
gnus-level-subscribed)))))
(or (not level)
- (let ((lev (get-text-property (point) 'gnus-level)))
- (if (and lev (<= lev level))
+ (let ((lev (get-text-property (point)
+ 'gnus-level)))
+ (if (and lev (= lev level))
t
- (if (< lev low)
+ (if (and (< lev low)
+ (< level low))
(progn
(setq low lev)
(setq pos (point))))
(or (gnus-server-opened method)
(gnus-open-server method)
(error "Unable to contact server: %s" (gnus-status-message method)))
- (if activate (gnus-request-group group))
+ (if activate (or (gnus-request-group group)
+ (error "Couldn't request group")))
(condition-case ()
(gnus-group-read-group t t group)
(error nil)
(concat "(gnus-group-set-info '" (prin1-to-string (cdr info)) ")"))
(gnus-group-insert-group-line-info nname)
- (require (intern method))
+ (if (assoc method gnus-valid-select-methods)
+ (require (intern method)))
(and (gnus-check-backend-function 'request-create-group nname)
(gnus-request-create-group nname))))
gnus-empty-thread-mark)
number)))
-(defun gnus-summary-read-group (group &optional show-all no-article kill-buffer)
+(defun gnus-summary-read-group
+ (group &optional show-all no-article kill-buffer)
"Start reading news in newsgroup GROUP.
If SHOW-ALL is non-nil, already read articles are also listed.
If NO-ARTICLE is non-nil, no article is selected initially."
(progn
(set-buffer gnus-group-buffer)
(gnus-group-jump-to-group group)
- (gnus-group-next-unread-group 1))
+ (gnus-group-next-unread-group 1)
+ (gnus-configure-windows 'group))
(if (not (buffer-name (car quit-config)))
(gnus-configure-windows 'group)
(set-buffer (car quit-config))
gnus-newsgroup-name))))
(mode major-mode)
(buf (current-buffer)))
+ (run-hooks 'gnus-summary-exit-hook)
(gnus-summary-update-info) ; Make all changes in this group permanent.
(set-buffer buf)
- (run-hooks 'gnus-summary-exit-hook)
(and gnus-use-cache (gnus-cache-possibly-remove-articles))
;; Make sure where I was, and go to next newsgroup.
(set-buffer gnus-group-buffer)
(gnus-summary-exit))
;; We try to enter the target group.
(gnus-group-jump-to-group target-group)
- (if (and (not (zerop (gnus-group-group-unread)))
- (gnus-summary-read-group
- target-group nil no-article current-buffer))
- (setq entered t)
- (setq current-group target-group
- target-group nil))))))
+ (let ((unreads (gnus-group-group-unread)))
+ (if (and (or (eq t unreads)
+ (and unreads (not (zerop unreads))))
+ (gnus-summary-read-group
+ target-group nil no-article current-buffer))
+ (setq entered t)
+ (setq current-group target-group
+ target-group nil)))))))
(defun gnus-summary-next-group-old (&optional no-article group backward)
"Exit current newsgroup and then select next unread newsgroup.
(progn
(gnus-summary-display-article article all-headers)
(setq did article))
- (if all-headers (gnus-article-show-all-headers))
+ (if (or all-headers gnus-show-all-headers)
+ (gnus-article-show-all-headers))
nil))
(if did
(gnus-article-set-window-start
(header-number header)))
(let ((gnus-override-method gnus-refer-article-method)
(gnus-ancient-mark gnus-read-mark)
- (tmp-buf (get-buffer-create " *gnus refer"))
(tmp-point (window-start
(get-buffer-window gnus-article-buffer)))
- number)
+ number tmp-buf)
(and gnus-refer-article-method
(or (gnus-server-opened gnus-refer-article-method)
(gnus-open-server gnus-refer-article-method)))
;; Save the old article buffer.
(save-excursion
- (set-buffer tmp-buf)
- (buffer-disable-undo (current-buffer))
- (insert-buffer-substring gnus-article-buffer))
+ (set-buffer gnus-article-buffer)
+ (gnus-kill-buffer " *temp Article*")
+ (setq tmp-buf (rename-buffer " *temp Article*")))
(prog1
(if (gnus-article-prepare
message-id nil (gnus-read-header message-id))
message-id)
;; We restore the old article buffer.
(save-excursion
- (set-buffer gnus-article-buffer)
+ (kill-buffer gnus-article-buffer)
+ (set-buffer tmp-buf)
+ (rename-buffer gnus-article-buffer)
(let ((buffer-read-only nil))
- (insert-buffer-substring tmp-buf)
(and tmp-point
(set-window-start (get-buffer-window (current-buffer))
tmp-point))))
- nil)
- (kill-buffer tmp-buf)))))))
+ (kill-buffer tmp-buf))))))))
(defun gnus-summary-enter-digest-group ()
"Enter a digest group based on the current article."
;; See whether the article is to be put in the cache.
(and gnus-use-cache
+ (not (= mark gnus-canceled-mark))
(save-excursion
(gnus-cache-possibly-enter-article
gnus-newsgroup-name article
;; Duplicate almost all summary keystrokes in the article mode map.
(let ((commands
(list
- " " "\177" "\r" "n" "p" "N" "P" "\M-\C-n" "\M-\C-p"
+ " " "\177" "n" "p" "N" "P" "\M-\C-n" "\M-\C-p"
"\M-n" "\M-p" "." "," "\M-s" "\M-r" "<" ">" "j" "^" "\M-^"
"u" "!" "U" "d" "D" "E" "\M-u" "\M-U" "k" "\C-k" "\M-\C-k"
"\M-\C-l" "e" "#" "\M-#" "\M-\C-t" "\M-\C-s" "\M-\C-h"
;; Suggested by Jim Sisolak
;; <sisolak@trans4.neep.wisc.edu>.
(gnus-set-global-variables)
+ (setq gnus-have-all-headers
+ (or all-headers gnus-show-all-headers))
(and gnus-use-cache
(gnus-cache-possibly-enter-article
group article
(memq article gnus-newsgroup-marked)
(memq article gnus-newsgroup-dormant)
(memq article gnus-newsgroup-unreads)))))
- ;; gnus-have-all-headers must be either T or NIL.
- (setq gnus-have-all-headers
- (not (not (or all-headers gnus-show-all-headers))))
;; Hooks for getting information from the article.
;; This hook must be called before being narrowed.
(let (buffer-read-only)
;; from the variable gnus-newsrc-alist.
(and (or gnus-newsrc-alist gnus-killed-list)
gnus-current-startup-file
- (let ((make-backup-files t)
- (version-control nil)
- (require-final-newline t)) ;Don't ask even if requested.
- ;; You can stop or change version control of backup file.
- ;; Suggested by jason@violet.berkeley.edu.
+ (progn
(run-hooks 'gnus-save-newsrc-hook)
(save-excursion
(if (or (not gnus-dribble-buffer)
gnus-current-startup-file)))
;; Quickly loadable .newsrc.
(set-buffer (get-buffer-create " *Gnus-newsrc*"))
+ (set-visited-file-name (concat gnus-current-startup-file ".eld"))
(gnus-add-current-to-buffer-list)
(buffer-disable-undo (current-buffer))
(erase-buffer)
(gnus-message 5 "Saving %s.eld..." gnus-current-startup-file)
(gnus-gnus-to-quick-newsrc-format)
- (write-region 1 (point-max)
- (concat gnus-current-startup-file ".eld")
- nil 'nomesg)
+ (save-buffer)
(kill-buffer (current-buffer))
(gnus-message 5 "Saving %s.eld...done" gnus-current-startup-file)
(gnus-dribble-delete-file))))))
info ranges range)
(save-excursion
(set-buffer (create-file-buffer gnus-startup-file))
+ (set-visited-file-name gnus-startup-file)
(buffer-disable-undo (current-buffer))
(erase-buffer)
;; Write options.
(if ranges (insert ","))))))
(insert "\n")))
(setq newsrc (cdr newsrc)))
- (write-region 1 (point-max) gnus-current-startup-file nil 'nomesg)
+ (save-buffer)
(kill-buffer (current-buffer)))))
(defun gnus-read-all-descriptions-files ()
"^------------------------------*[\n \t]+"
"^------------------------------[\n \t]+"
nil "^ ?$"
- "^-----------------------------------------*[\n \t]+"
+ "^------------------------------*[\n \t]+"
"^End of"))
"Regular expressions for articles of the various types.")
;; `source' is either a string (a file name) or a buffer object.
(buf
(setq nndoc-current-buffer buf))
- ;; It's a totally new group.
+ ;; It's a totally new group.
((or (and (bufferp nndoc-address)
(buffer-name nndoc-address))
(and (stringp nndoc-address)
(autoload 'news-reply-mode "rnewspost")
(autoload 'nnmail-request-post-buffer "nnmail")
(autoload 'cancel-timer "timer")
- (autoload 'telnet "telnet")
- (autoload 'telnet-send-input "telnet")
+ (autoload 'telnet "telnet" nil t)
+ (autoload 'telnet-send-input "telnet" nil t)
(autoload 'timezone-parse-date "timezone"))
(defvar nntp-server-hook nil
into another language, under the above conditions for modified versions.
@end ifinfo
+@iftex
+
@titlepage
@title (ding) Gnus Manual
@end titlepage
@page
+@end iftex
+
@node Top
@top The Gnus Newsreader
@table @samp
@item D
-Articles that are marked as read. They have a @samp{D}
+Articles that are marked as read. They have a @samp{r}
(@code{gnus-del-mark}) in the first column. These are articles that the
user has marked as read more or less manually.
@item d
-Articles that are actually read are marked with @samp{d}
+Articles that are actually read are marked with @samp{R}
(@code{gnus-read-mark}).
@item A
Articles that were marked as read in previous sessions are now
-@dfn{ancient} and marked with @samp{A} (@code{gnus-ancient-mark}).
+@dfn{old} and marked with @samp{O} (@code{gnus-ancient-mark}).
@item K
Marked as killed (@code{gnus-killed-mark}).
@item X
in the article, and Gnus will jump to this bookmark the next time it
encounters the article.
-All articles that you have replied to or made a followup to will be
-marked with an @samp{R} in the second column (@code{gnus-replied-mark}).
+All articles that you have replied to or made a followup to (i.e., have
+answered) will be marked with an @samp{A} in the second column
+(@code{gnus-replied-mark}).
@vindex gnus-not-empty-thread-mark
@vindex gnus-empty-thread-mark
Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
@item W f
@kindex W f (Summary)
+@cindex x-face
@findex gnus-article-display-x-face
@findex gnus-article-x-face-command
@vindex gnus-article-x-face-command
that mode line updated with information that may be pertinent. If this
variable is @code{nil}, screen refresh may be quicker.
+@cindex display-time
@item gnus-mode-non-string-length
@vindex gnus-mode-non-string-length
By default, Gnus displays information on the current article in the mode