*** pub/sgnus/lisp/gnus-cus.el Sun Jun 2 13:35:39 1996 --- sgnus/lisp/gnus-cus.el Tue Jun 4 12:25:04 1996 *************** *** 31,37 **** (require 'browse-url) (eval-when-compile (require 'cl)) ! ;; The following is just helper functions and data, not ment to be set ;; by the user. (defun gnus-make-face (color) ;; Create entry for face with COLOR. --- 31,37 ---- (require 'browse-url) (eval-when-compile (require 'cl)) ! ;; 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. *************** *** 43,69 **** "turquoise")) (defvar gnus-face-dark-name-list ! '("RoyalBlue" "firebrick" ! "dark green" "OrangeRed" "dark khaki" "dark violet" ! "SteelBlue4")) ; CornflowerBlue SeaGreen OrangeRed SteelBlue4 DeepPink3 ; DarkOlviveGreen4 (custom-declare '() ! '((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.") (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 less space and be faster as a result.") (default . (summary-highlight group-highlight --- 43,68 ---- "turquoise")) (defvar gnus-face-dark-name-list ! '("RoyalBlue" "firebrick" "dark green" "OrangeRed" ! "dark khaki" "dark violet" "SteelBlue4")) ; CornflowerBlue SeaGreen OrangeRed SteelBlue4 DeepPink3 ; DarkOlviveGreen4 (custom-declare '() ! '((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.") (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 less space and be faster as a result.") (default . (summary-highlight group-highlight *************** *** 563,568 **** --- 562,638 ---- ((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. *************** *** 575,590 **** ((eq alist 'dark) (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) --- 645,650 ---- *** pub/sgnus/lisp/gnus-ems.el Sun Jun 2 13:35:39 1996 --- sgnus/lisp/gnus-ems.el Tue Jun 4 12:14:02 1996 *************** *** 171,177 **** (eval-and-compile (let ((case-fold-search t)) (cond ! ((string-match "windows-nt\\|os/2" (format "%s" system-type)) (setq nnheader-file-name-translation-alist (append nnheader-file-name-translation-alist '((?: . ?_) --- 171,177 ---- (eval-and-compile (let ((case-fold-search t)) (cond ! ((string-match "windows-nt\\|os/2\\|emx" (format "%s" system-type)) (setq nnheader-file-name-translation-alist (append nnheader-file-name-translation-alist '((?: . ?_) *** pub/sgnus/lisp/gnus-msg.el Sun Jun 2 13:35:39 1996 --- sgnus/lisp/gnus-msg.el Tue Jun 4 12:14:02 1996 *************** *** 27,33 **** ;;; Code: (require 'gnus) - (require 'sendmail) (require 'gnus-ems) (require 'message) (eval-when-compile (require 'cl)) --- 27,32 ---- *************** *** 164,177 **** (gnus-setup-message 'message (message-mail))) ! (defun gnus-group-post-news () "Start composing a news message. ! The newsgroup under the cursor is used as the group to post to." ! (interactive) ;; 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)))) (defun gnus-summary-post-news () "Start composing a news message." --- 163,183 ---- (gnus-setup-message 'message (message-mail))) ! (defun gnus-group-post-news (&optional arg) "Start composing a news message. ! 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 ! (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." *** pub/sgnus/lisp/gnus-score.el Sun Jun 2 13:35:41 1996 --- sgnus/lisp/gnus-score.el Tue Jun 4 12:14:04 1996 *************** *** 1807,1816 **** (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))) ;; The we score away. (while data (setq elem (cdr (assq (gnus-data-mark (car data)) alist))) --- 1807,1818 ---- (setq elem (cdr elem))) (setq malist (cdr malist))) ;; We change the score file to the adaptive score file. ! (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))) *** pub/sgnus/lisp/gnus-topic.el Sun Jun 2 13:35:41 1996 --- sgnus/lisp/gnus-topic.el Tue Jun 4 12:14:05 1996 *************** *** 881,887 **** "Yank the last topic." (interactive "p") (if gnus-topic-killed-topics ! (let ((previous (gnus-group-parent-topic)) (item (cdr (pop gnus-topic-killed-topics)))) (gnus-topic-create-topic (caar item) (gnus-topic-parent-topic previous) previous --- 881,889 ---- "Yank the last topic." (interactive "p") (if gnus-topic-killed-topics ! (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 *** pub/sgnus/lisp/gnus-uu.el Sun Jun 2 13:35:42 1996 --- sgnus/lisp/gnus-uu.el Tue Jun 4 12:14:06 1996 *************** *** 1124,1131 **** ;; ;; 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) (let ((state 'first) has-been-begin article result-file result-files process-state gnus-summary-display-article-function --- 1124,1131 ---- ;; ;; 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) (let ((state 'first) has-been-begin article result-file result-files process-state gnus-summary-display-article-function *************** *** 1640,1648 **** ;;; ;;; 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" --- 1640,1645 ---- *** pub/sgnus/lisp/gnus-vis.el Sun Jun 2 13:35:44 1996 --- sgnus/lisp/gnus-vis.el Tue Jun 4 12:14:08 1996 *************** *** 261,284 **** ;;; 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))))) "Group lines are highlighted with the FACE for the first FORM which evaluate to a non-nil value. --- 261,268 ---- ;;; Group mode highlighting. ! ;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. *** pub/sgnus/lisp/gnus.el Sun Jun 2 13:35:45 1996 --- sgnus/lisp/gnus.el Tue Jun 4 13:25:42 1996 *************** *** 33,41 **** --- 33,43 ---- (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.") *************** *** 1726,1732 **** "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)" "The mail address of the Gnus maintainers.") ! (defconst gnus-version-number "5.2.5" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number) --- 1728,1734 ---- "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)" "The mail address of the Gnus maintainers.") ! (defconst gnus-version-number "5.2.6" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number) *************** *** 1736,1742 **** '((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.") (defvar gnus-group-buffer "*Group*") (defvar gnus-summary-buffer "*Summary*") --- 1738,1744 ---- '((gnus-group-mode "(gnus)The Group Buffer") (gnus-summary-mode "(gnus)The Summary Buffer") (gnus-article-mode "(gnus)The Article Buffer")) ! "Alist of major modes and related Info nodes.") (defvar gnus-group-buffer "*Group*") (defvar gnus-summary-buffer "*Summary*") *************** *** 1937,1943 **** 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-newsgroup-active gnus-scores-exclude-files gnus-newsgroup-history gnus-newsgroup-ancient gnus-newsgroup-sparse --- 1939,1945 ---- 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 . global) gnus-newsgroup-active gnus-scores-exclude-files gnus-newsgroup-history gnus-newsgroup-ancient gnus-newsgroup-sparse *************** *** 1998,2007 **** ("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 --- 2000,2006 ---- *************** *** 2914,2920 **** (setq prefixes (cons prefix prefixes)) (message "Descend hierarchy %s? ([y]nsq): " (substring prefix 1 (1- (length prefix)))) ! (setq ans (read-char)) (cond ((= ans ?n) (while (and groups (string-match prefix --- 2913,2922 ---- (setq prefixes (cons prefix prefixes)) (message "Descend hierarchy %s? ([y]nsq): " (substring prefix 1 (1- (length prefix)))) ! (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 *************** *** 2940,2946 **** (setq groups (cdr groups)))) (t nil))) (message "Subscribe %s? ([n]yq)" (car groups)) ! (setq ans (read-char)) (setq group (car groups)) (cond ((= ans ?y) (gnus-subscribe-alphabetically (car groups)) --- 2942,2950 ---- (setq groups (cdr groups)))) (t nil))) (message "Subscribe %s? ([n]yq)" (car groups)) ! (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)) *************** *** 7147,7161 **** (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-make-thread-indent-array) (gnus-simplify-mode-line) (setq major-mode 'gnus-summary-mode) --- 7151,7157 ---- (gnus-visual-p 'summary-menu 'menu)) (gnus-summary-make-menu-bar)) (kill-all-local-variables) ! (gnus-summary-make-local-variables) (gnus-make-thread-indent-array) (gnus-simplify-mode-line) (setq major-mode 'gnus-summary-mode) *************** *** 7174,7179 **** --- 7170,7193 ---- (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 *************** *** 8073,8082 **** (id (mail-header-id header)) (data (gnus-data-find article)) (thread (gnus-id-to-thread id)) (parent ! (gnus-id-to-thread (or (gnus-parent-id ! (mail-header-references header)) ! "tull"))) (buffer-read-only nil) (old (car thread)) (number (mail-header-number header)) --- 8087,8100 ---- (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 ! (if (and references ! (not (equal "" references))) ! references)) ! "none"))) (buffer-read-only nil) (old (car thread)) (number (mail-header-number header)) *************** *** 8772,8783 **** (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)))) (setq gnus-reffed-article-number -1) ;; GROUP is successfully selected. (or gnus-newsgroup-headers t))))) --- 8790,8801 ---- (unless gnus-single-article-buffer (gnus-article-setup-buffer)) ;; First and last article in this newsgroup. ! (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))))) *************** *** 9411,9423 **** (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)))))) header)) (defun gnus-article-get-xrefs () --- 9429,9440 ---- (setq header nil)) (setcar (symbol-value id-dep) header)) (set id-dep (list header)))) ! (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 () *************** *** 9452,9458 **** (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 (setq pos (text-property-any (point-min) (point-max) 'gnus-number (mail-header-number old-header))) --- 9469,9476 ---- (when header ;; Rebuild the thread that this article is part of and go to the ;; article we have fetched. ! (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))) *************** *** 13680,13690 **** --- 13698,13721 ---- ;; 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. *************** *** 13978,13994 **** (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)))))))) (defun gnus-article-word-wrap () "Format too long lines." --- 14009,14026 ---- (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)))))))) (defun gnus-article-word-wrap () "Format too long lines." *************** *** 14416,14422 **** (if (gnus-visual-p 'article-highlight 'highlight) (gnus-article-highlight-some))) ! ;; Article savers. (defun gnus-output-to-rmail (file-name) "Append the current article to an Rmail file named FILE-NAME." --- 14448,14454 ---- (if (gnus-visual-p 'article-highlight 'highlight) (gnus-article-highlight-some))) ! ;;; Article savers. (defun gnus-output-to-rmail (file-name) "Append the current article to an Rmail file named FILE-NAME." *** pub/sgnus/lisp/message.el Sun Jun 2 13:35:46 1996 --- sgnus/lisp/message.el Tue Jun 4 12:14:14 1996 *************** *** 39,47 **** --- 39,51 ---- (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. *************** *** 134,140 **** nil means let mailer mail back a message to report errors.") ;;;###autoload ! (defvar message-generate-new-buffers nil "*Non-nil means that a new message buffer will be created whenever `mail-setup' is called.") ;;;###autoload --- 138,144 ---- nil means let mailer mail back a message to report errors.") ;;;###autoload ! (defvar message-generate-new-buffers t "*Non-nil means that a new message buffer will be created whenever `mail-setup' is called.") ;;;###autoload *************** *** 397,402 **** --- 401,408 ---- ;;; 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 *************** *** 1224,1229 **** --- 1230,1237 ---- (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))) *************** *** 1879,1885 **** (defun message-make-from () "Make a From header." (let* ((login (message-make-address)) ! (fullname (user-full-name))) (when (string= fullname "&") (setq fullname (user-login-name))) (save-excursion --- 1887,1896 ---- (defun message-make-from () "Make a From header." (let* ((login (message-make-address)) ! (fullname ! (or (and (boundp 'user-full-name) ! user-full-name) ! (user-full-name)))) (when (string= fullname "&") (setq fullname (user-login-name))) (save-excursion *************** *** 2154,2176 **** (forward-line 2))) (sit-for 0))) (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))))) (erase-buffer) (message-mode)) (defun message-setup (headers &optional replybuffer actions) (when actions (setq message-send-actions actions)) --- 2165,2220 ---- (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." ! (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)) *************** *** 2189,2195 **** (forward-line -1) (when message-default-headers (insert message-default-headers)) ! (insert mail-header-separator "\n") (forward-line -1) (when (message-news-p) (when message-default-news-headers --- 2233,2244 ---- (forward-line -1) (when message-default-headers (insert message-default-headers)) ! (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 *************** *** 2245,2258 **** (defun message-mail (&optional to subject) "Start editing a mail message to be sent." (interactive) ! (message-pop-to-buffer "*mail message*") (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-setup `((Newsgroups . ,(or newsgroups "")) (Subject . ,(or subject ""))))) --- 2294,2307 ---- (defun message-mail (&optional to subject) "Start editing a mail message to be sent." (interactive) ! (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 (message-buffer-name "news" nil newsgroups)) (message-setup `((Newsgroups . ,(or newsgroups "")) (Subject . ,(or subject ""))))) *************** *** 2340,2346 **** follow-to))))) (widen)) ! (message-pop-to-buffer "*mail message*") (setq message-reply-headers (vector 0 subject from date message-id references 0 0 "")) --- 2389,2395 ---- follow-to))))) (widen)) ! (message-pop-to-buffer (message-buffer-name "reply" from)) (setq message-reply-headers (vector 0 subject from date message-id references 0 0 "")) *************** *** 2399,2405 **** (setq subject (concat "Re: " subject)) (widen)) ! (message-pop-to-buffer "*news message*") (message-setup `((Subject . ,subject) --- 2448,2454 ---- (setq subject (concat "Re: " subject)) (widen)) ! (message-pop-to-buffer (message-buffer-name "followup" from newsgroups)) (message-setup `((Subject . ,subject) *************** *** 2511,2517 **** (downcase (message-make-address))) (error "This article is not yours")) ;; Get a normal message buffer. ! (message-pop-to-buffer "*supersede message*") (insert-buffer-substring cur) (message-narrow-to-head) ;; Remove unwanted headers. --- 2560,2566 ---- (downcase (message-make-address))) (error "This article is not yours")) ;; Get a normal message buffer. ! (message-pop-to-buffer (message-buffer-name "supersede")) (insert-buffer-substring cur) (message-narrow-to-head) ;; Remove unwanted headers. *************** *** 2637,2643 **** (interactive) (let ((cur (current-buffer)) boundary) ! (message-pop-to-buffer "*mail message*") (insert-buffer-substring cur) (undo-boundary) (message-narrow-to-head) --- 2686,2692 ---- (interactive) (let ((cur (current-buffer)) boundary) ! (message-pop-to-buffer (message-buffer-name "bounce")) (insert-buffer-substring cur) (undo-boundary) (message-narrow-to-head) *************** *** 2683,2689 **** (special-display-regexps nil) (same-window-buffer-names nil) (same-window-regexps nil)) ! (message-pop-to-buffer "*mail message*")) (message-setup `((To . ,(or to "")) (Subject . ,(or subject ""))))) ;;;###autoload --- 2732,2738 ---- (special-display-regexps nil) (same-window-buffer-names nil) (same-window-regexps nil)) ! (message-pop-to-buffer (message-buffer-name "mail" to))) (message-setup `((To . ,(or to "")) (Subject . ,(or subject ""))))) ;;;###autoload *************** *** 2695,2701 **** (special-display-regexps nil) (same-window-buffer-names nil) (same-window-regexps nil)) ! (message-pop-to-buffer "*mail message*")) (message-setup `((To . ,(or to "")) (Subject . ,(or subject ""))))) ;;;###autoload --- 2744,2750 ---- (special-display-regexps nil) (same-window-buffer-names nil) (same-window-regexps nil)) ! (message-pop-to-buffer (message-buffer-name "mail" to))) (message-setup `((To . ,(or to "")) (Subject . ,(or subject ""))))) ;;;###autoload *************** *** 2707,2713 **** (special-display-regexps nil) (same-window-buffer-names nil) (same-window-regexps nil)) ! (message-pop-to-buffer "*news message*")) (message-setup `((Newsgroups . ,(or newsgroups "")) (Subject . ,(or subject ""))))) --- 2756,2762 ---- (special-display-regexps nil) (same-window-buffer-names nil) (same-window-regexps nil)) ! (message-pop-to-buffer (message-buffer-name "news" nil newsgroups))) (message-setup `((Newsgroups . ,(or newsgroups "")) (Subject . ,(or subject ""))))) *************** *** 2720,2726 **** (special-display-regexps nil) (same-window-buffer-names nil) (same-window-regexps nil)) ! (message-pop-to-buffer "*news message*")) (message-setup `((Newsgroups . ,(or newsgroups "")) (Subject . ,(or subject ""))))) --- 2769,2775 ---- (special-display-regexps nil) (same-window-buffer-names nil) (same-window-regexps nil)) ! (message-pop-to-buffer (message-buffer-name "news" nil newsgroups))) (message-setup `((Newsgroups . ,(or newsgroups "")) (Subject . ,(or subject ""))))) *** pub/sgnus/lisp/nndb.el Sun Jun 2 13:35:47 1996 --- sgnus/lisp/nndb.el Tue Jun 4 12:14:15 1996 *************** *** 37,44 **** ;;; Code: - (require 'rnews) - (require 'sendmail) (require 'nnheader) (require 'nntp) (eval-when-compile (require 'cl)) --- 37,42 ---- *** pub/sgnus/lisp/nnheader.el Sun Jun 2 13:35:47 1996 --- sgnus/lisp/nnheader.el Tue Jun 4 12:14:15 1996 *************** *** 38,44 **** ;;; Code: (require 'mail-utils) - (require 'sendmail) (eval-when-compile (require 'cl)) (defvar nnheader-max-head-length 4096 --- 38,43 ---- *** pub/sgnus/lisp/nnmail.el Sun Jun 2 13:35:47 1996 --- sgnus/lisp/nnmail.el Tue Jun 4 12:14:15 1996 *************** *** 27,33 **** (require 'nnheader) (require 'timezone) - (require 'sendmail) (require 'message) (eval-when-compile (require 'cl)) --- 27,32 ---- *** pub/sgnus/lisp/nntp.el Sun Jun 2 13:35:48 1996 --- sgnus/lisp/nntp.el Tue Jun 4 12:14:16 1996 *************** *** 26,33 **** ;;; Code: - (require 'rnews) - (require 'sendmail) (require 'nnheader) (require 'nnoo) (eval-when-compile (require 'cl)) --- 26,31 ---- *************** *** 41,48 **** (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) --- 39,44 ---- *** pub/sgnus/lisp/nnvirtual.el Sun Jun 2 13:35:48 1996 --- sgnus/lisp/nnvirtual.el Tue Jun 4 12:14:16 1996 *************** *** 289,295 **** (deffoo nnvirtual-catchup-group (group &optional server all) (nnvirtual-possibly-change-server server) ! (let ((gnus-group-marked nnvirtual-component-groups) (gnus-expert-user t)) ;; Make sure all groups are activated. (mapcar --- 289,295 ---- (deffoo nnvirtual-catchup-group (group &optional server all) (nnvirtual-possibly-change-server server) ! (let ((gnus-group-marked (copy-sequence nnvirtual-component-groups)) (gnus-expert-user t)) ;; Make sure all groups are activated. (mapcar *** pub/sgnus/lisp/ChangeLog Sun Jun 2 13:35:56 1996 --- sgnus/lisp/ChangeLog Tue Jun 4 13:25:43 1996 *************** *** 1,4 **** --- 1,78 ---- + Tue Jun 4 11:11:13 1996 Lars Magne Ingebrigtsen + + * gnus.el (gnus-summary-make-local-variables): Set local variables + correctly. + + Tue Jun 4 07:51:02 1996 Steven L. Baur + + * gnus-cus.el (()): New "light' group highlighting. + + Tue Jun 4 07:26:10 1996 Lars Magne Ingebrigtsen + + * 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 + + * 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 + + * 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 + + * gnus.el: Gnus v5.2.5 is released. * gnus-topic.el (gnus-topic-remove-group): Only delete first instance. *** pub/sgnus/texi/gnus.texi Sun Jun 2 13:35:58 1996 --- sgnus/texi/gnus.texi Tue Jun 4 12:14:23 1996 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename gnus.info ! @settitle September Gnus Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename gnus.info ! @settitle Gnus 5.2 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 230,236 **** @tex @titlepage ! @title September Gnus Manual @author by Lars Magne Ingebrigtsen @page --- 230,236 ---- @tex @titlepage ! @title Gnus Manual @author by Lars Magne Ingebrigtsen @page *************** *** 11130,11137 **** 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. @menu * Why?:: What's the point of Gnus? --- 11130,11137 ---- The first ``proper'' release of Gnus 5 was done in November 1995 when it was included in the Emacs 19.30 distribution. ! 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? *** pub/sgnus/texi/message.texi Sun Jun 2 13:35:58 1996 --- sgnus/texi/message.texi Tue Jun 4 12:14:23 1996 *************** *** 177,182 **** --- 177,186 ---- @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 *************** *** 888,893 **** --- 892,924 ---- When sending combined messages, this string is inserted at the start of the mailed copy. If this variable is @code{nil}, no such courtesy message will be added. + + @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 *** pub/sgnus/texi/ChangeLog Sun Jun 2 13:35:57 1996 --- sgnus/texi/ChangeLog Tue Jun 4 12:14:16 1996 *************** *** 1,3 **** --- 1,9 ---- + Mon Jun 3 07:37:34 1996 Lars Magne Ingebrigtsen + + * gnus.texi (History): Change. + + * message.texi (Wide Reply): Addition. + Fri May 31 08:58:16 1996 Lars Magne Ingebrigtsen * gnus.texi (Summary Mail and Post Commands): Removed.