+Tue Sep 3 05:30:02 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * gnus-async.el (gnus-async-prefetch-article): Reset async list
+ when the summary buffer is killed.
+
+ * gnus-xmas.el (gnus-xmas-modeline-glyph): Don't use glyph under
+ tty.
+
+ * gnus-msg.el (gnus-copy-article-buffer): Deleted text in article
+ buffer.
+
+Tue Sep 3 05:10:19 1996 Kurt Swanson <kurt@dna.lth.se>
+
+ * gnus-sum.el (gnus-group-no-more-groups-hook): New variable.
+
+Tue Sep 3 04:44:31 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-exit): Would bug out when using a
+ single article buffer.
+
+Mon Sep 2 05:50:07 1996 Lars Magne Ingebrigtsen <larsi@narfi.ifi.uio.no>
+
+ * gnus-audio.el (gnus-audio-play): Give the sound-file argument as
+ ARG in addition to stdin.
+
+Mon Sep 2 05:28:26 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el: Red Gnus v0.23 is released.
+
Mon Sep 2 05:16:46 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* gnus-audio.el: Renamed from "gnus-sound".
(set-buffer gnus-summary-buffer)
(let ((next (caadr (gnus-data-find-list article))))
(when next
- (if gnus-xemacs
+ (if (not (fboundp 'run-with-idle-timer))
+ ;; This is either an older Emacs or XEmacs, so we
+ ;; do this, which leads to slightly slower article
+ ;; buffer display.
(gnus-async-prefetch-article group next summary)
(run-with-idle-timer
0.1 nil 'gnus-async-prefetch-article group next summary)))))))
(defun gnus-async-prefetch-article (group article summary &optional next)
"Possibly prefetch several articles starting with ARTICLE."
- (when (and gnus-asynchronous
- (gnus-alive-p))
- (when next
- (gnus-async-get-semaphore 'gnus-async-article-semaphore)
- (pop gnus-async-fetch-list)
- (gnus-async-release-semaphore 'gnus-async-article-semaphore))
- (let ((do-fetch next))
- (when (and (gnus-group-asynchronous-p group)
- (gnus-buffer-live-p summary)
- (or (not next)
- gnus-async-fetch-list))
- (unwind-protect
- (progn
- (gnus-async-get-semaphore 'gnus-async-article-semaphore)
- (unless next
- (setq do-fetch (not gnus-async-fetch-list))
- ;; Nix out any outstanding requests.
- (setq gnus-async-fetch-list nil)
- ;; Fill in the new list.
- (let ((n gnus-use-article-prefetch)
- (data (gnus-data-find-list article))
- d)
- (while (and (setq d (pop data))
- (if (numberp n)
- (natnump (decf n))
- n))
- (unless (or (gnus-async-prefetched-article-entry
- group (setq article (gnus-data-number d)))
- (not (natnump article)))
- ;; Not already fetched -- so we add it to the list.
- (push article gnus-async-fetch-list)))
- (setq gnus-async-fetch-list
- (nreverse gnus-async-fetch-list))))
-
- (when do-fetch
- (setq article (car gnus-async-fetch-list))))
+ (if (not (gnus-buffer-live-p summary))
+ (progn
+ (gnus-async-get-semaphore 'gnus-async-article-semaphore)
+ (setq gnus-async-fetch-list nil)
+ (gnus-async-release-semaphore 'gnus-async-article-semaphore))
+ (when (and gnus-asynchronous
+ (gnus-alive-p))
+ (when next
+ (gnus-async-get-semaphore 'gnus-async-article-semaphore)
+ (pop gnus-async-fetch-list)
+ (gnus-async-release-semaphore 'gnus-async-article-semaphore))
+ (let ((do-fetch next))
+ (when (and (gnus-group-asynchronous-p group)
+ (gnus-buffer-live-p summary)
+ (or (not next)
+ gnus-async-fetch-list))
+ (unwind-protect
+ (progn
+ (gnus-async-get-semaphore 'gnus-async-article-semaphore)
+ (unless next
+ (setq do-fetch (not gnus-async-fetch-list))
+ ;; Nix out any outstanding requests.
+ (setq gnus-async-fetch-list nil)
+ ;; Fill in the new list.
+ (let ((n gnus-use-article-prefetch)
+ (data (gnus-data-find-list article))
+ d)
+ (while (and (setq d (pop data))
+ (if (numberp n)
+ (natnump (decf n))
+ n))
+ (unless (or (gnus-async-prefetched-article-entry
+ group (setq article (gnus-data-number d)))
+ (not (natnump article)))
+ ;; Not already fetched -- so we add it to the list.
+ (push article gnus-async-fetch-list)))
+ (setq gnus-async-fetch-list
+ (nreverse gnus-async-fetch-list))))
+
+ (when do-fetch
+ (setq article (car gnus-async-fetch-list))))
- (gnus-async-release-semaphore 'gnus-async-article-semaphore))
+ (gnus-async-release-semaphore 'gnus-async-article-semaphore))
- (when (and do-fetch article)
- ;; We want to fetch some more articles.
- (save-excursion
- (set-buffer summary)
- (let (mark)
- (gnus-async-set-buffer)
- (goto-char (point-max))
- (setq mark (point-marker))
- (let ((nnheader-callback-function
- (gnus-make-async-article-function
- group article mark summary next))
- (nntp-server-buffer (get-buffer
- gnus-async-prefetch-article-buffer)))
- (gnus-message 7 "Prefetching article %d in group %s"
- article group)
- (gnus-request-article article group)))))))))
+ (when (and do-fetch article)
+ ;; We want to fetch some more articles.
+ (save-excursion
+ (set-buffer summary)
+ (let (mark)
+ (gnus-async-set-buffer)
+ (goto-char (point-max))
+ (setq mark (point-marker))
+ (let ((nnheader-callback-function
+ (gnus-make-async-article-function
+ group article mark summary next))
+ (nntp-server-buffer (get-buffer
+ gnus-async-prefetch-article-buffer)))
+ (gnus-message 7 "Prefetching article %d in group %s"
+ article group)
+ (gnus-request-article article group))))))))))
(defun gnus-make-async-article-function (group article mark summary next)
"Return a callback function."
(concat gnus-audio-directory file))))
(when (file-exists-p sound-file)
(if gnus-audio-inline-sound
- (play-sound-file (concat gnus-audio-directory sound-file))
+ (play-sound-file sound-file)
(cond ((string-match "\\.wav$" sound-file)
(call-process gnus-audio-wav-player
- (concat gnus-audio-directory sound-file)
+ sound-file
0
- nil))
+ nil
+ sound-file))
((string-match "\\.au$" sound-file)
(call-process gnus-audio-au-player
- (concat gnus-audio-directory sound-file)
+ sound-file
0
- nil)))))))
+ nil
+ sound-file)))))))
;;; The following isn't implemented yet, wait for Red Gnus
,gnus-level-default-subscribed nil nil ,method
((quit-config .
,(if quit-config quit-config
- (cons (current-buffer)
+ (cons gnus-summary-buffer
gnus-current-window-configuration))))))
gnus-newsrc-hashtb)
(set-buffer gnus-group-buffer)
(save-excursion
(set-buffer article-buffer)
(save-restriction
+ ;; Copy over the (displayed) article buffer, delete
+ ;; hidden text and remove text properties.
(widen)
+ (copy-to-buffer gnus-article-copy (point-min) (point-max))
+ (set-buffer gnus-article-copy)
(article-delete-text-of-type 'annotation)
- (setq contents (format "%s" (buffer-string)))
+ (insert
+ (prog1
+ (format "%s" (buffer-string))
+ (erase-buffer)))
+ ;; Find the original headers.
(set-buffer gnus-original-article-buffer)
(goto-char (point-min))
(while (looking-at message-unix-mail-delimiter)
(forward-line 1))
(setq beg (point))
(setq end (or (search-forward "\n\n" nil t) (point)))
+ ;; Delete the headers from the displayed articles.
(set-buffer gnus-article-copy)
- (erase-buffer)
- (insert contents)
(delete-region (goto-char (point-min))
(or (search-forward "\n\n" nil t) (point)))
+ ;; Insert the original article headers.
(insert-buffer-substring gnus-original-article-buffer beg end)))
gnus-article-copy)))
The hook is intended to mark an article as read (or unread)
automatically when it is selected.")
+(defvar gnus-group-no-more-groups-hook nil
+ "*A hook run when returning to group mode having no more (unread) groups.")
+
;;; Internal variables
(defvar gnus-summary-display-table
(gnus-set-global-variables))
((eq major-mode 'gnus-article-mode)
(save-excursion
+ ;; The `gnus-summary-buffer' variable may point
+ ;; to the old summary buffer when using a single
+ ;; article buffer.
+ (unless (gnus-buffer-live-p gnus-summary-buffer)
+ (set-buffer gnus-group-buffer))
(set-buffer gnus-summary-buffer)
(gnus-set-global-variables))))
(gnus-configure-windows (cdr quit-config) 'force)))
(gnus-message 5 "Returning to the group buffer")
(setq entered t)
(set-buffer current-buffer)
- (gnus-summary-exit))
+ (gnus-summary-exit)
+ (run-hooks 'gnus-group-no-more-groups-hook))
;; We try to enter the target group.
(gnus-group-jump-to-group target-group)
(let ((unreads (gnus-group-group-unread)))
to guess what the document format is."
(interactive "P")
(gnus-set-global-variables)
- (save-excursion
- (gnus-summary-select-article))
- (let* ((name (format "%s-%d"
- (gnus-group-prefixed-name
- gnus-newsgroup-name (list 'nndoc ""))
- (save-excursion
- (set-buffer gnus-summary-buffer)
- gnus-current-article)))
- (ogroup gnus-newsgroup-name)
- (params (append (gnus-info-params (gnus-get-info ogroup))
- (list (cons 'to-group ogroup))))
- (case-fold-search t)
- (buf (current-buffer))
- dig)
+ (let ((conf gnus-current-window-configuration))
(save-excursion
- (setq dig (nnheader-set-temp-buffer " *gnus digest buffer*"))
- (insert-buffer-substring gnus-original-article-buffer)
- ;; Remove lines that may lead nndoc to misinterpret the
- ;; document type.
- (narrow-to-region
- (goto-char (point-min))
- (or (search-forward "\n\n" nil t) (point)))
- (goto-char (point-min))
- (delete-matching-lines "^\\(Path\\):\\|^From ")
- (widen))
- (unwind-protect
- (if (gnus-group-read-ephemeral-group
- name `(nndoc ,name (nndoc-address
- ,(get-buffer dig))
- (nndoc-article-type ,(if force 'digest 'guess))) t)
- ;; Make all postings to this group go to the parent group.
- (nconc (gnus-info-params (gnus-get-info name))
- params)
- ;; Couldn't select this doc group.
- (switch-to-buffer buf)
- (gnus-set-global-variables)
- (gnus-configure-windows 'summary)
- (gnus-message 3 "Article couldn't be entered?"))
- (kill-buffer dig))))
+ (gnus-summary-select-article))
+ (setq gnus-current-window-configuration conf)
+ (let* ((name (format "%s-%d"
+ (gnus-group-prefixed-name
+ gnus-newsgroup-name (list 'nndoc ""))
+ (save-excursion
+ (set-buffer gnus-summary-buffer)
+ gnus-current-article)))
+ (ogroup gnus-newsgroup-name)
+ (params (append (gnus-info-params (gnus-get-info ogroup))
+ (list (cons 'to-group ogroup))))
+ (case-fold-search t)
+ (buf (current-buffer))
+ dig)
+ (save-excursion
+ (setq dig (nnheader-set-temp-buffer " *gnus digest buffer*"))
+ (insert-buffer-substring gnus-original-article-buffer)
+ ;; Remove lines that may lead nndoc to misinterpret the
+ ;; document type.
+ (narrow-to-region
+ (goto-char (point-min))
+ (or (search-forward "\n\n" nil t) (point)))
+ (goto-char (point-min))
+ (delete-matching-lines "^\\(Path\\):\\|^From ")
+ (widen))
+ (unwind-protect
+ (if (gnus-group-read-ephemeral-group
+ name `(nndoc ,name (nndoc-address ,(get-buffer dig))
+ (nndoc-article-type ,(if force 'digest 'guess))) t)
+ ;; Make all postings to this group go to the parent group.
+ (nconc (gnus-info-params (gnus-get-info name))
+ params)
+ ;; Couldn't select this doc group.
+ (switch-to-buffer buf)
+ (gnus-set-global-variables)
+ (gnus-configure-windows 'summary)
+ (gnus-message 3 "Article couldn't be entered?"))
+ (kill-buffer dig)))))
(defun gnus-summary-read-document (n)
"Open a new group based on the current article(s).
(draft . gnus-draft-buffer))
"Mapping from short symbols to buffer names or buffer variables.")
+;;; Internal variables.
+
(defvar gnus-current-window-configuration nil
"The most recently set window configuration.")
-;;; Internal variables.
-
(defvar gnus-created-frames nil)
(defun gnus-kill-gnus-frames ()
(let* ((file (concat gnus-xmas-glyph-directory "gnus-pointer."
(if (featurep 'xpm) "xpm" "xbm")))
(glyph (make-glyph file)))
- (when (file-exists-p file)
+ (when (and (featurep 'x)
+ (file-exists-p file))
(set-glyph-face glyph 'modeline-buffer-id)
glyph))))
(eval '(run-hooks 'gnus-load-hook))
-(defconst gnus-version-number "0.23"
+(defconst gnus-version-number "0.24"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Red Gnus v%s" gnus-version-number)
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Red Gnus 0.23 Manual
+@settitle Red Gnus 0.24 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Red Gnus 0.23 Manual
+@title Red Gnus 0.24 Manual
@author by Lars Magne Ingebrigtsen
@page