+Tue Jun 4 11:11:13 1996 Lars Magne Ingebrigtsen <larsi@eistla.ifi.uio.no>
+
+ * gnus.el (gnus-summary-make-local-variables): Set local variables
+ correctly.
+
+Tue Jun 4 07:51:02 1996 Steven L. Baur <steve@miranova.com>
+
+ * gnus-cus.el (()): New "light' group highlighting.
+
+Tue Jun 4 07:26:10 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.el (gnus-subscribe-hierarchical-interactive): Don't accept
+ wrong characters.
+
+ * message.el (message-directory): Autoload.
+
+Mon Jun 3 07:30:18 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.el (gnus-summary-make-local-variables): Separated into own
+ function.
+ (gnus-summary-make-local-variables): Respect global values.
+
+ * nnheader.el (sendmail): Unrequired.
+ (backquote): Ditto.
+
+ * nntp.el (rnews): Unrequired.
+
+ * gnus-msg.el (gnus-group-post-news): `C-u a' posts to the group
+ under point, `C-u 1 a' prompts, `a' uses an empty group name.
+
+ * message.el (message-setup): Make separator read-only.
+
+ * gnus-cus.el (()): Define `gnus-group-highlight'.
+
+ * gnus-vis.el (gnus-group-highlight): Commented out.
+
+ * gnus-topic.el (gnus-topic-yank-group): Yank topics at the end of
+ the buffer correctly.
+
+ * gnus-score.el (gnus-score-adaptive): Make sure we use the
+ buffer-local adaptive score variable.
+
+ * gnus-msg.el (gnus-group-post-news): Prompt when given a prefix.
+
+ * nnvirtual.el (nnvirtual-catchup-group): Might have corrupted the
+ list of component groups.
+
+ * gnus-ems.el: Work under OS/2 again.
+
+ * gnus.el (gnus-remove-header): New function.
+ (gnus-read-header): Use it.
+ (gnus-summary-insert-subject): Didn't work when editing articles
+ in a non-threaded display.
+ (gnus-summary-update-article): Would create multiple root
+ threads when editing.
+
+ * message.el (message-do-send-housekeeping): Reverse check.
+
+ * nnheader.el (backquote): Required.
+
+ * gnus.el (backquote): Required.
+
+ * message.el (message-make-from): Use the `user-full-name'
+ variable.
+
+Sun Jun 2 16:50:49 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * message.el (message-number-of-buffers): New variable.
+ (message-generate-new-buffers): Changed default.
+ (message-do-send-housekeeping): New function.
+ (message-buffer-name): New function.
+
Sun Jun 2 07:41:20 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+ * gnus.el: Gnus v5.2.5 is released.
+
* gnus-topic.el (gnus-topic-remove-group): Only delete first
instance.
(gnus-topic-move-group): Ditto.
(require 'browse-url)
(eval-when-compile (require 'cl))
-;; The following is just helper functions and data, not ment to be set
+;; The following is just helper functions and data, not meant to be set
;; by the user.
(defun gnus-make-face (color)
;; Create entry for face with COLOR.
"turquoise"))
(defvar gnus-face-dark-name-list
- '("RoyalBlue" "firebrick"
- "dark green" "OrangeRed" "dark khaki" "dark violet"
- "SteelBlue4"))
+ '("RoyalBlue" "firebrick" "dark green" "OrangeRed"
+ "dark khaki" "dark violet" "SteelBlue4"))
; CornflowerBlue SeaGreen OrangeRed SteelBlue4 DeepPink3
; DarkOlviveGreen4
(custom-declare '()
- '((tag . "GNUS")
+ '((tag . "Gnus")
(doc . "\
The coffee-brewing, all singing, all dancing, kitchen sink newsreader.")
(type . group)
(data
((tag . "Visual")
(doc . "\
-GNUS can be made colorful and fun or grey and dull as you wish.")
+Gnus can be made colorful and fun or grey and dull as you wish.")
(type . group)
(data
((tag . "Visual")
(doc . "Enable visual features.
If `visual' is disabled, there will be no menus and few faces. Most of
-the visual customization options below will be ignored. GNUS will use
+the visual customization options below will be ignored. Gnus will use
less space and be faster as a result.")
(default .
(summary-highlight group-highlight
((type . face)
(tag . "Face"))
"\n")))))
+
+ ((tag . "Group Line Highlighting")
+ (doc . "\
+Controls the highlighting of group buffer lines.
+
+Below is a list of `Form'/`Face' pairs. When deciding how a a
+particular group line should be displayed, each form is
+evaluated. The content of the face field after the first true form is
+used. You can change how those group lines are displayed by
+editing the face field.
+
+It is also possible to change and add form fields, but currently that
+requires an understanding of Lisp expressions. Hopefully this will
+change in a future release. For now, you can use the following
+variables in the Lisp expression:
+
+group: The name of the group.
+unread: The number of unread articles in the group.
+method: The select method used.
+mailp: Whether it's a mail group or not.
+level: The level of the group.
+score: The score of the group.
+ticked: The number of ticked articles.")
+ (name . gnus-group-highlight)
+ (type . list)
+ (calculate
+ . (cond
+ ((not (eq gnus-display-type 'color))
+ '((mailp . bold)
+ ((= unread 0) . italic)))
+ ((eq gnus-background-mode 'dark)
+ `(((> unread 200) .
+ ,(custom-face-lookup "Red" nil nil t nil nil))
+ ((and (< level 3) (zerop unread)) .
+ ,(custom-face-lookup "SeaGreen" nil nil t nil nil))
+ ((< level 3) .
+ ,(custom-face-lookup "SpringGreen" nil nil t nil nil))
+ ((zerop unread) .
+ ,(custom-face-lookup "SteelBlue" nil nil t nil nil))
+ (t . ,(custom-face-lookup "SkyBlue" nil nil t nil nil))))
+ (t
+ `(((and (not mailp) (<= level 3)) .
+ ,(custom-face-lookup "ForestGreen" nil nil t nil nil))
+ ((and (not mailp) (eq level 4)) .
+ ,(custom-face-lookup "DarkGreen" nil nil t nil nil))
+ ((and (not mailp) (eq level 5)) .
+ ,(custom-face-lookup "Red" nil nil t nil nil))
+ ((and mailp (eq level 1)) .
+ ,(custom-face-lookup "DeepPink3" nil nil t nil nil))
+ ((and mailp (eq level 2)) .
+ ,(custom-face-lookup "HotPink3" nil nil t nil nil))
+ ((and mailp (eq level 3)) .
+ ,(custom-face-lookup "dark magenta" nil nil t nil nil))
+ ((and mailp (eq level 4)) .
+ ,(custom-face-lookup "DeepPink4" nil nil t nil nil))
+ ((and mailp (> level 4)) .
+ ,(custom-face-lookup "DarkOrchid4" nil nil t nil nil))
+ ))))
+ (data
+ ((type . repeat)
+ (header . nil)
+ (data (type . pair)
+ (compact . t)
+ (data ((type . sexp)
+ (width . 60)
+ (tag . "Form"))
+ "\n "
+ ((type . face)
+ (tag . "Face"))
+ "\n")))))
+
;; Do not define `gnus-button-alist' before we have
;; some `complexity' attribute so we can hide it from
;; beginners.
(setq alist (mapcar 'gnus-make-face gnus-face-dark-name-list))))
(funcall (custom-super custom 'import) custom alist))
-;(defun gnus-custom-import-swap-alist (custom alist)
-; ;; Swap key and value in CUSTOM ALIST.
-; (let ((swap (mapcar (lambda (e) (cons (cdr e) (car e))) alist)))
-; (funcall (custom-super custom 'import) custom swap)))
-
-;(defun gnus-custom-export-swap-alist (custom alist)
-; ;; Swap key and value in CUSTOM ALIST.
-; (let ((swap (mapcar (lambda (e) (cons (cdr e) (car e))) alist)))
-; (funcall (custom-super custom 'export) custom swap)))
-
(provide 'gnus-cus)
;;; gnus-cus.el ends here
(eval-and-compile
(let ((case-fold-search t))
(cond
- ((string-match "windows-nt\\|os/2" (format "%s" system-type))
+ ((string-match "windows-nt\\|os/2\\|emx" (format "%s" system-type))
(setq nnheader-file-name-translation-alist
(append nnheader-file-name-translation-alist
'((?: . ?_)
;;; Code:
(require 'gnus)
-(require 'sendmail)
(require 'gnus-ems)
(require 'message)
(eval-when-compile (require 'cl))
(gnus-setup-message 'message
(message-mail)))
-(defun gnus-group-post-news ()
+(defun gnus-group-post-news (&optional arg)
"Start composing a news message.
-The newsgroup under the cursor is used as the group to post to."
- (interactive)
+If ARG, post to the group under point.
+If ARG is 1, prompt for a group name."
+ (interactive "P")
;; Bind this variable here to make message mode hooks
;; work ok.
- (let ((gnus-newsgroup-name (gnus-group-group-name)))
- (gnus-post-news 'post (gnus-group-group-name))))
+ (let ((gnus-newsgroup-name
+ (if arg
+ (if (= 1 (prefix-numeric-value arg))
+ (completing-read "Newsgroup: " gnus-active-hashtb nil
+ (gnus-read-active-file-p))
+ (gnus-group-group-name))
+ "")))
+ (gnus-post-news 'post gnus-newsgroup-name)))
(defun gnus-summary-post-news ()
"Start composing a news message."
(setq elem (cdr elem)))
(setq malist (cdr malist)))
;; We change the score file to the adaptive score file.
- (gnus-score-load-file
- (or gnus-newsgroup-adaptive-score-file
- (gnus-score-file-name
- gnus-newsgroup-name gnus-adaptive-file-suffix)))
+ (save-excursion
+ (set-buffer gnus-summary-buffer)
+ (gnus-score-load-file
+ (or gnus-newsgroup-adaptive-score-file
+ (gnus-score-file-name
+ gnus-newsgroup-name gnus-adaptive-file-suffix))))
;; The we score away.
(while data
(setq elem (cdr (assq (gnus-data-mark (car data)) alist)))
"Yank the last topic."
(interactive "p")
(if gnus-topic-killed-topics
- (let ((previous (gnus-group-parent-topic))
+ (let ((previous
+ (or (gnus-group-topic-name)
+ (gnus-topic-next-topic (gnus-group-parent-topic))))
(item (cdr (pop gnus-topic-killed-topics))))
(gnus-topic-create-topic
(caar item) (gnus-topic-parent-topic previous) previous
;;
;; This function returns a list of files decoded if the grabbing and
;; the process-function has been successful and nil otherwise.
-(defun gnus-uu-grab-articles
- (articles process-function &optional sloppy limit no-errors)
+(defun gnus-uu-grab-articles (articles process-function
+ &optional sloppy limit no-errors)
(let ((state 'first)
has-been-begin article result-file result-files process-state
gnus-summary-display-article-function
;;; uuencoded posting
;;;
-(require 'sendmail)
-(require 'rnews)
-
;; Any function that is to be used as and encoding method will take two
;; parameters: PATH-NAME and FILE-NAME. (E.g. "/home/gaga/spiral.jpg"
;; and "spiral.jpg", respectively.) The function should return nil if
;;; Group mode highlighting.
-(defvar gnus-group-highlight
- (cond
- ((not (eq gnus-display-type 'color))
- '((mailp . bold)
- ((= unread 0) . italic)))
- ((eq gnus-background-mode 'dark)
- `(((> unread 200) . ,(custom-face-lookup "Red" nil nil t nil nil))
- ((and (< level 3) (zerop unread)) .
- ,(custom-face-lookup "SeaGreen" nil nil t nil nil))
- ((< level 3) . ,(custom-face-lookup "SpringGreen" nil nil t nil nil))
- ((zerop unread) . ,(custom-face-lookup "SteelBlue" nil nil t nil nil))
- (t . ,(custom-face-lookup "SkyBlue" nil nil t nil nil))
- ))
- (t
- `(((not mailp) .
- ,(custom-face-lookup "ForestGreen" nil nil t nil nil))
- ((zerop unread) .
- ,(custom-face-lookup "Blue" nil nil t nil nil)))))
+;see gnus-cus.el
+(defvar gnus-group-highlight nil
"Group lines are highlighted with the FACE for the first FORM which
evaluate to a non-nil value.
(require 'nnheader)
(require 'message)
(require 'nnmail)
+(require 'backquote)
(eval-when-compile (require 'cl))
+;;;###autoload
(defvar gnus-directory (or (getenv "SAVEDIR") "~/News/")
"*Directory variable from which all other Gnus file variables are derived.")
"gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
-(defconst gnus-version-number "5.2.5"
+(defconst gnus-version-number "5.2.6"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Gnus v%s" gnus-version-number)
'((gnus-group-mode "(gnus)The Group Buffer")
(gnus-summary-mode "(gnus)The Summary Buffer")
(gnus-article-mode "(gnus)The Article Buffer"))
- "Assoc list of major modes and related Info nodes.")
+ "Alist of major modes and related Info nodes.")
(defvar gnus-group-buffer "*Group*")
(defvar gnus-summary-buffer "*Summary*")
gnus-newsgroup-scored gnus-newsgroup-kill-headers
gnus-newsgroup-async gnus-thread-expunge-below
gnus-score-alist gnus-current-score-file gnus-summary-expunge-below
- (gnus-summary-mark-below . 0)
+ (gnus-summary-mark-below . global)
gnus-newsgroup-active gnus-scores-exclude-files
gnus-newsgroup-history gnus-newsgroup-ancient
gnus-newsgroup-sparse
("nnvirtual" nnvirtual-catchup-group)
("timezone" timezone-make-date-arpa-standard timezone-fix-time
timezone-make-sortable-date timezone-make-time-string)
- ("sendmail" mail-position-on-field mail-setup)
("rmailout" rmail-output)
- ("rnewspost" news-mail-other-window news-reply-yank-original
- news-caesar-buffer-body)
("rmail" rmail-insert-rmail-file-header rmail-count-new-messages
rmail-show-message)
("gnus-soup" :interactive t
(setq prefixes (cons prefix prefixes))
(message "Descend hierarchy %s? ([y]nsq): "
(substring prefix 1 (1- (length prefix))))
- (setq ans (read-char))
+ (while (not (memq (setq ans (read-char)) '(?y ?\n ?n ?s ?q)))
+ (ding)
+ (message "Descend hierarchy %s? ([y]nsq): "
+ (substring prefix 1 (1- (length prefix)))))
(cond ((= ans ?n)
(while (and groups
(string-match prefix
(setq groups (cdr groups))))
(t nil)))
(message "Subscribe %s? ([n]yq)" (car groups))
- (setq ans (read-char))
+ (while (not (memq (setq ans (read-char)) '(?y ?\n ?q ?n)))
+ (ding)
+ (message "Subscribe %s? ([n]yq)" (car groups)))
(setq group (car groups))
(cond ((= ans ?y)
(gnus-subscribe-alphabetically (car groups))
(gnus-visual-p 'summary-menu 'menu))
(gnus-summary-make-menu-bar))
(kill-all-local-variables)
- (let ((locals gnus-summary-local-variables))
- (while locals
- (if (consp (car locals))
- (progn
- (make-local-variable (caar locals))
- (set (caar locals) (eval (cdar locals))))
- (make-local-variable (car locals))
- (set (car locals) nil))
- (setq locals (cdr locals))))
+ (gnus-summary-make-local-variables)
(gnus-make-thread-indent-array)
(gnus-simplify-mode-line)
(setq major-mode 'gnus-summary-mode)
(make-local-variable 'gnus-summary-mark-positions)
(run-hooks 'gnus-summary-mode-hook))
+(defun gnus-summary-make-local-variables ()
+ "Make all the local summary buffer variables."
+ (let ((locals gnus-summary-local-variables)
+ global local)
+ (while (setq local (pop locals))
+ (if (consp local)
+ (progn
+ (if (eq (cdr local) 'global)
+ ;; Copy the global value of the variable.
+ (setq global (symbol-value (car local)))
+ ;; Use the value from the list.
+ (setq global (eval (cdr local))))
+ (make-local-variable (car local))
+ (set (car local) global))
+ ;; Simple nil-valued local variable.
+ (make-local-variable local)
+ (set local nil)))))
+
(defun gnus-summary-make-display-table ()
;; Change the display table. Odd characters have a tendency to mess
;; up nicely formatted displays - we make all possible glyphs
(id (mail-header-id header))
(data (gnus-data-find article))
(thread (gnus-id-to-thread id))
+ (references (mail-header-references header))
(parent
- (gnus-id-to-thread (or (gnus-parent-id
- (mail-header-references header))
- "tull")))
+ (gnus-id-to-thread
+ (or (gnus-parent-id
+ (if (and references
+ (not (equal "" references)))
+ references))
+ "none")))
(buffer-read-only nil)
(old (car thread))
(number (mail-header-number header))
(unless gnus-single-article-buffer
(gnus-article-setup-buffer))
;; First and last article in this newsgroup.
- (and gnus-newsgroup-headers
- (setq gnus-newsgroup-begin
- (mail-header-number (car gnus-newsgroup-headers)))
- (setq gnus-newsgroup-end
- (mail-header-number
- (gnus-last-element gnus-newsgroup-headers))))
+ (when gnus-newsgroup-headers
+ (setq gnus-newsgroup-begin
+ (mail-header-number (car gnus-newsgroup-headers))
+ gnus-newsgroup-end
+ (mail-header-number
+ (gnus-last-element gnus-newsgroup-headers))))
(setq gnus-reffed-article-number -1)
;; GROUP is successfully selected.
(or gnus-newsgroup-headers t)))))
(setq header nil))
(setcar (symbol-value id-dep) header))
(set id-dep (list header))))
- (if header
- (progn
- (if (boundp (setq ref-dep (intern (or ref "none") dependencies)))
- (setcdr (symbol-value ref-dep)
- (nconc (cdr (symbol-value ref-dep))
- (list (symbol-value id-dep))))
- (set ref-dep (list nil (symbol-value id-dep))))))
+ (when header
+ (if (boundp (setq ref-dep (intern (or ref "none") dependencies)))
+ (setcdr (symbol-value ref-dep)
+ (nconc (cdr (symbol-value ref-dep))
+ (list (symbol-value id-dep))))
+ (set ref-dep (list nil (symbol-value id-dep)))))
header))
(defun gnus-article-get-xrefs ()
(when header
;; Rebuild the thread that this article is part of and go to the
;; article we have fetched.
- (when (and nil old-header)
+ (when (and (not gnus-show-threads)
+ old-header)
(when (setq pos (text-property-any
(point-min) (point-max) 'gnus-number
(mail-header-number old-header)))
;; numbers for this article.
(mail-header-set-number header gnus-reffed-article-number))
(decf gnus-reffed-article-number)
+ (gnus-remove-header (mail-header-number header))
(push header gnus-newsgroup-headers)
(setq gnus-current-headers header)
(push (mail-header-number header) gnus-newsgroup-limit))
header)))))
+(defun gnus-remove-header (number)
+ "Remove header NUMBER from `gnus-newsgroup-headers'."
+ (if (and gnus-newsgroup-headers
+ (= number (mail-header-number (car gnus-newsgroup-headers))))
+ (pop gnus-newsgroup-headers)
+ (let ((headers gnus-newsgroup-headers))
+ (while (and (cdr headers)
+ (not (= number (mail-header-number (cadr headers)))))
+ (pop headers))
+ (when (cdr headers)
+ (setcdr headers (cddr headers))))))
+
(defun gnus-article-prepare (article &optional all-headers header)
"Prepare ARTICLE in article mode buffer.
ARTICLE should either be an article number or a Message-ID.
(while (search-forward "\b" nil t)
(let ((next (following-char))
(previous (char-after (- (point) 2))))
- (cond ((eq next previous)
- (gnus-put-text-property (- (point) 2) (point) 'invisible t)
- (gnus-put-text-property (point) (1+ (point)) 'face 'bold))
- ((eq next ?_)
- (gnus-put-text-property (1- (point)) (1+ (point)) 'invisible t)
- (gnus-put-text-property
- (- (point) 2) (1- (point)) 'face 'underline))
- ((eq previous ?_)
- (gnus-put-text-property (- (point) 2) (point) 'invisible t)
- (gnus-put-text-property
- (point) (1+ (point)) 'face 'underline))))))))
+ (cond
+ ((eq next previous)
+ (gnus-put-text-property (- (point) 2) (point) 'invisible t)
+ (gnus-put-text-property (point) (1+ (point)) 'face 'bold))
+ ((eq next ?_)
+ (gnus-put-text-property (1- (point)) (1+ (point)) 'invisible t)
+ (gnus-put-text-property
+ (- (point) 2) (1- (point)) 'face 'underline))
+ ((eq previous ?_)
+ (gnus-put-text-property (- (point) 2) (point) 'invisible t)
+ (gnus-put-text-property
+ (point) (1+ (point)) 'face 'underline))))))))
(defun gnus-article-word-wrap ()
"Format too long lines."
(if (gnus-visual-p 'article-highlight 'highlight)
(gnus-article-highlight-some)))
-;; Article savers.
+;;; Article savers.
(defun gnus-output-to-rmail (file-name)
"Append the current article to an Rmail file named FILE-NAME."
(require 'mail-abbrevs)
(require 'mailabbrev))
+;;;###autoload
(defvar message-directory "~/Mail/"
"*Directory from which all other mail file variables are derived.")
+(defvar message-max-buffers 10
+ "*How many buffers to keep before starting to kill them off.")
+
;;;###autoload
(defvar message-fcc-handler-function 'rmail-output
"*A function called to save outgoing articles.
nil means let mailer mail back a message to report errors.")
;;;###autoload
-(defvar message-generate-new-buffers nil
+(defvar message-generate-new-buffers t
"*Non-nil means that a new message buffer will be created whenever `mail-setup' is called.")
;;;###autoload
;;; Internal variables.
+(defvar message-buffer-list nil)
+
;;; Regexp matching the delimiter of messages in UNIX mail format
;;; (UNIX From lines), minus the initial ^.
(defvar message-unix-mail-delimiter
(unless buffer-file-name
(set-buffer-modified-p nil)
(delete-auto-save-file-if-necessary t))
+ ;; Delete other mail buffers and stuff.
+ (message-do-send-housekeeping)
(message-do-actions message-send-actions)
;; Return success.
t)))
(defun message-make-from ()
"Make a From header."
(let* ((login (message-make-address))
- (fullname (user-full-name)))
+ (fullname
+ (or (and (boundp 'user-full-name)
+ user-full-name)
+ (user-full-name))))
(when (string= fullname "&")
(setq fullname (user-login-name)))
(save-excursion
(forward-line 2)))
(sit-for 0)))
+(defun message-buffer-name (type &optional to group)
+ "Return a new (unique) buffer name based on TYPE and TO."
+ (if message-generate-new-buffers
+ (generate-new-buffer-name
+ (concat "*" type
+ (if (or to group)
+ (concat " to "
+ (or (car (mail-extract-address-components to))
+ to)
+ (if group (concat " on " group) ""))
+ "")
+ "*"))
+ (format "*%s message*" type)))
+
(defun message-pop-to-buffer (name)
"Pop to buffer NAME, and warn if it already exists and is modified."
- (if message-generate-new-buffers
- (set-buffer (pop-to-buffer (generate-new-buffer name)))
- (let ((buffer (get-buffer name)))
- (if (and buffer
- (buffer-name buffer))
- (progn
- (set-buffer (pop-to-buffer buffer))
- (when (and (buffer-modified-p)
- (not (y-or-n-p
- "Message already being composed; erase? ")))
- (error "Message being composed")))
- (set-buffer (pop-to-buffer name)))))
+ (let ((buffer (get-buffer name)))
+ (if (and buffer
+ (buffer-name buffer))
+ (progn
+ (set-buffer (pop-to-buffer buffer))
+ (when (and (buffer-modified-p)
+ (not (y-or-n-p
+ "Message already being composed; erase? ")))
+ (error "Message being composed")))
+ (set-buffer (pop-to-buffer name))))
(erase-buffer)
(message-mode))
+(defun message-do-send-housekeeping ()
+ "Kill old message buffers."
+ ;; 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))
+ ;; Kill the oldest buffer -- unless it has been changed.
+ (let ((buffer (pop message-buffer-list)))
+ (when (and (buffer-name buffer)
+ (not (buffer-modified-p buffer)))
+ (kill-buffer buffer))))
+ ;; Rename the buffer.
+ (when (string-match "\\`\\*" (buffer-name))
+ (rename-buffer
+ (concat "*sent " (substring (buffer-name) (match-end 0))) t))
+ ;; Push the current buffer onto the list.
+ (when message-max-buffers
+ (setq message-buffer-list
+ (nconc message-buffer-list (list (current-buffer))))))
+
(defun message-setup (headers &optional replybuffer actions)
(when actions
(setq message-send-actions actions))
(forward-line -1)
(when message-default-headers
(insert message-default-headers))
- (insert mail-header-separator "\n")
+ (put-text-property
+ (point)
+ (progn
+ (insert mail-header-separator "\n")
+ (point))
+ 'read-only nil)
(forward-line -1)
(when (message-news-p)
(when message-default-news-headers
(defun message-mail (&optional to subject)
"Start editing a mail message to be sent."
(interactive)
- (message-pop-to-buffer "*mail message*")
+ (message-pop-to-buffer (message-buffer-name "mail" to))
(message-setup `((To . ,(or to "")) (Subject . ,(or subject "")))))
;;;###autoload
(defun message-news (&optional newsgroups subject)
"Start editing a news article to be sent."
(interactive)
- (message-pop-to-buffer "*news message*")
+ (message-pop-to-buffer (message-buffer-name "news" nil newsgroups))
(message-setup `((Newsgroups . ,(or newsgroups ""))
(Subject . ,(or subject "")))))
follow-to)))))
(widen))
- (message-pop-to-buffer "*mail message*")
+ (message-pop-to-buffer (message-buffer-name "reply" from))
(setq message-reply-headers
(vector 0 subject from date message-id references 0 0 ""))
(setq subject (concat "Re: " subject))
(widen))
- (message-pop-to-buffer "*news message*")
+ (message-pop-to-buffer (message-buffer-name "followup" from newsgroups))
(message-setup
`((Subject . ,subject)
(downcase (message-make-address)))
(error "This article is not yours"))
;; Get a normal message buffer.
- (message-pop-to-buffer "*supersede message*")
+ (message-pop-to-buffer (message-buffer-name "supersede"))
(insert-buffer-substring cur)
(message-narrow-to-head)
;; Remove unwanted headers.
(interactive)
(let ((cur (current-buffer))
boundary)
- (message-pop-to-buffer "*mail message*")
+ (message-pop-to-buffer (message-buffer-name "bounce"))
(insert-buffer-substring cur)
(undo-boundary)
(message-narrow-to-head)
(special-display-regexps nil)
(same-window-buffer-names nil)
(same-window-regexps nil))
- (message-pop-to-buffer "*mail message*"))
+ (message-pop-to-buffer (message-buffer-name "mail" to)))
(message-setup `((To . ,(or to "")) (Subject . ,(or subject "")))))
;;;###autoload
(special-display-regexps nil)
(same-window-buffer-names nil)
(same-window-regexps nil))
- (message-pop-to-buffer "*mail message*"))
+ (message-pop-to-buffer (message-buffer-name "mail" to)))
(message-setup `((To . ,(or to "")) (Subject . ,(or subject "")))))
;;;###autoload
(special-display-regexps nil)
(same-window-buffer-names nil)
(same-window-regexps nil))
- (message-pop-to-buffer "*news message*"))
+ (message-pop-to-buffer (message-buffer-name "news" nil newsgroups)))
(message-setup `((Newsgroups . ,(or newsgroups ""))
(Subject . ,(or subject "")))))
(special-display-regexps nil)
(same-window-buffer-names nil)
(same-window-regexps nil))
- (message-pop-to-buffer "*news message*"))
+ (message-pop-to-buffer (message-buffer-name "news" nil newsgroups)))
(message-setup `((Newsgroups . ,(or newsgroups ""))
(Subject . ,(or subject "")))))
;;; Code:
-(require 'rnews)
-(require 'sendmail)
(require 'nnheader)
(require 'nntp)
(eval-when-compile (require 'cl))
;;; Code:
(require 'mail-utils)
-(require 'sendmail)
(eval-when-compile (require 'cl))
(defvar nnheader-max-head-length 4096
(require 'nnheader)
(require 'timezone)
-(require 'sendmail)
(require 'message)
(eval-when-compile (require 'cl))
;;; Code:
-(require 'rnews)
-(require 'sendmail)
(require 'nnheader)
(require 'nnoo)
(eval-when-compile (require 'cl))
(eval-when-compile (require 'cl))
(eval-and-compile
- (autoload 'news-setup "rnewspost")
- (autoload 'news-reply-mode "rnewspost")
(autoload 'cancel-timer "timer")
(autoload 'telnet "telnet" nil t)
(autoload 'telnet-send-input "telnet" nil t)
(deffoo nnvirtual-catchup-group (group &optional server all)
(nnvirtual-possibly-change-server server)
- (let ((gnus-group-marked nnvirtual-component-groups)
+ (let ((gnus-group-marked (copy-sequence nnvirtual-component-groups))
(gnus-expert-user t))
;; Make sure all groups are activated.
(mapcar
+Mon Jun 3 07:37:34 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (History): Change.
+
+ * message.texi (Wide Reply): Addition.
+
Fri May 31 08:58:16 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
* gnus.texi (Summary Mail and Post Commands): Removed.
\input texinfo @c -*-texinfo-*-
@setfilename gnus.info
-@settitle September Gnus Manual
+@settitle Gnus 5.2 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title September Gnus Manual
+@title Gnus Manual
@author by Lars Magne Ingebrigtsen
@page
The first ``proper'' release of Gnus 5 was done in November 1995 when it
was included in the Emacs 19.30 distribution.
-Incidentally, the next Gnus generation will be called ``September
-Gnus'', and won't be released until April 1996. Confused? You will be.
+In May 1996 the next Gnus generation (aka. ``September Gnus'') was
+released under the name ``Gnus 5.2''.
@menu
* Why?:: What's the point of Gnus?
@code{message-wide-reply-to-function}. It is used in the same way as
@code{message-reply-to-function} (@pxref{Reply}).
+@findex rmail-dont-reply-to-names
+Addresses that matches the @code{rmail-dont-reply-to-names} regular
+expression will be removed from the @code{Cc} header.
+
@node Followup
@section Followup
@end table
+@node Message Buffers
+@section Message Buffers
+
+Message will generate new buffers with unique buffer names when you
+request a message buffer. When you send the message, the buffer isn't
+normally killed off. It's name is changed and a certain number of old
+message buffers are kept alive.
+
+@table @code
+@item message-generate-new-buffers
+@findex message-generate-new-buffers
+If non-@code{nil}, generate new buffers. The default is @code{t}.
+
+@item message-max-buffers
+@findex message-max-buffers
+This variable says how many old message buffers to keep. If there are
+more message buffers than this, the oldest buffer will be killed. The
+default is 10. If this variable is @code{nil}, no old message buffers
+will ever be killed.
+
+@item message-kill-buffer-on-exit
+@findex message-kill-buffer-on-exit
+If non-@code{nil}, kill the buffer immediately on exit.
+
+@end table
+
+
@node Message Actions
@section Message Actions