diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/ChangeLog dgnus/lisp/ChangeLog *** pub/dgnus/lisp/ChangeLog Sat May 13 15:24:06 1995 --- dgnus/lisp/ChangeLog Mon May 15 19:50:37 1995 *************** *** 1,3 **** --- 1,46 ---- + Mon May 15 18:29:20 1995 Lars Magne Ingebrigtsen + + * gnus.el (gnus-summary-insert-line): Make sure Lines is a number. + + (gnus-summary-select-article): Don't scroll to the end of the + article buffer. + + Mon May 15 16:38:04 1995 Lars Magne Ingebrigtsen + + * gnus.el (gnus-summary-sort): Hide threads after sorting, if that + is wanted. + + Sun May 14 01:10:51 1995 Lars Ingebrigtsen + + * gnus.el (gnus-verbose): New variable. + (gnus-group-mark-group): Stop when there are no more groups to go. + (gnus-group-search-forward): Message when attempting to go too far + back. + + * gnus.el: Use it. + (gnus-group-add-to-virtual): New command and keystroke. + + * gnus-vm.el: Did not load vm. + + * gnus.el (gnus-summary-mode-map): New keystroke for saving with + vm. + + * gnus-score.el (gnus-score-load-file): (adapt t) will work + independently of gnus-use-adaptive-scoring. + + * gnus.el (gnus-summary-recenter): New implementation. + + Sat May 13 19:52:35 1995 Lars Ingebrigtsen + + * gnus.el (gnus-nov-parse-line): Would not read Xrefs. + + * gnus-score.el (gnus-score-save): Don't pp adaptive score files. + (gnus-score-adaptive): Put adaptive entries in a separate score + file. + (gnus-score-followup): Put entries into the adaptive score file. + + * gnus.el (gnus-use-scoring): New variable. + Sat May 13 11:16:31 1995 Lars Magne Ingebrigtsen * gnus.el (gnus-summary-refer-article): Mark fetched articles as diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-cite.el dgnus/lisp/gnus-cite.el *** pub/dgnus/lisp/gnus-cite.el Sat May 13 15:23:57 1995 --- dgnus/lisp/gnus-cite.el Mon May 15 11:09:14 1995 *************** *** 1,15 **** ! ;;; gnus-cite.el --- Highlight GNUS article. ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Per Abrahamsen ;; Keywords: news, mail ;;; Commentary: ;;; Code: (require 'gnus) ! (require 'gnus-vis) ;;; Customization: --- 1,34 ---- ! ;;; gnus-cite.el --- parse citations in articles for Gnus ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Per Abrahamsen ;; Keywords: news, mail + ;; This file is part of GNU Emacs. + + ;; GNU Emacs is free software; you can redistribute it and/or modify + ;; it under the terms of the GNU General Public License as published by + ;; the Free Software Foundation; either version 2, or (at your option) + ;; any later version. + + ;; GNU Emacs is distributed in the hope that it will be useful, + ;; but WITHOUT ANY WARRANTY; without even the implied warranty of + ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ;; GNU General Public License for more details. + + ;; You should have received a copy of the GNU General Public License + ;; along with GNU Emacs; see the file COPYING. If not, write to + ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + ;;; Commentary: ;;; Code: (require 'gnus) ! ! (eval-and-compile ! (autoload 'gnus-article-add-button "gnus-vis") ! ) ;;; Customization: *************** *** 61,69 **** --- 80,102 ---- (defvar gnus-cite-hide-absolute 10 "Only hide cited text if there is at least this number of cited lines.") + (defvar gnus-face-light-name-list + '("light blue" "light cyan" "light yellow" "light pink" + "pale green" "beige" "orange" "magenta" "violet" "medium purple" + "turquoise") + "Names of light colors.") + + (defvar gnus-face-dark-name-list + '("blue" "dark salmon" "firebrick" + "dark green" "dark orange" "dark khaki" "dark violet" + "dark turquoise") + "Names of dark colors.") ;;; Internal Variables: + (defvar gnus-article-length nil) + ;; Length of article last time we parsed it. + (defvar gnus-cite-prefix-alist nil) ;; Alist of citation prefixes. ;; The cdr is a list of lines with that prefix. *************** *** 113,118 **** --- 146,152 ---- (let ((buffer-read-only nil) (alist gnus-cite-prefix-alist) (faces gnus-cite-face-list) + (inhibit-point-motion-hooks t) face entry prefix skip numbers number face-alist end) ;; Loop through citation prefixes. (while alist *************** *** 166,171 **** --- 200,206 ---- (gnus-cite-parse-maybe) (let ((buffer-read-only nil) (alist gnus-cite-prefix-alist) + (inhibit-point-motion-hooks t) numbers number) (while alist (setq numbers (cdr (car alist)) *************** *** 175,182 **** numbers (cdr numbers)) (goto-line number) (or (assq number gnus-cite-attribution-alist) ! (put-text-property (point) (progn (forward-line 1) (point)) ! 'invisible t))))))) (defun gnus-article-hide-citation-maybe (&optional force) "Hide cited text that has an attribution line. --- 210,217 ---- numbers (cdr numbers)) (goto-line number) (or (assq number gnus-cite-attribution-alist) ! (add-text-properties (point) (progn (forward-line 1) (point)) ! gnus-hidden-properties))))))) (defun gnus-article-hide-citation-maybe (&optional force) "Hide cited text that has an attribution line. *************** *** 194,199 **** --- 229,235 ---- (let ((start (point)) (atts gnus-cite-attribution-alist) (buffer-read-only nil) + (inhibit-point-motion-hooks t) (hiden 0) total) (goto-char (point-max)) *************** *** 216,223 **** total (cdr total)) (goto-line hiden) (or (assq hiden gnus-cite-attribution-alist) ! (put-text-property (point) (progn (forward-line 1) (point)) ! 'invisible t))))))))) ;;; Internal functions: --- 252,260 ---- total (cdr total)) (goto-line hiden) (or (assq hiden gnus-cite-attribution-alist) ! (add-text-properties (point) ! (progn (forward-line 1) (point)) ! gnus-hidden-properties))))))))) ;;; Internal functions: *************** *** 467,473 **** (defun gnus-cite-add-face (number prefix face) ;; At line NUMBER, ignore PREFIX and add FACE to the rest of the line. (if face ! (let (from to) (goto-line number) (forward-char (length prefix)) (skip-chars-forward " \t") --- 504,511 ---- (defun gnus-cite-add-face (number prefix face) ;; At line NUMBER, ignore PREFIX and add FACE to the rest of the line. (if face ! (let ((inhibit-point-motion-hooks t) ! from to) (goto-line number) (forward-char (length prefix)) (skip-chars-forward " \t") *************** *** 483,500 **** (set-buffer gnus-article-buffer) (let ((buffer-read-only nil) (numbers (cdr (assoc prefix gnus-cite-prefix-alist))) number) (while numbers (setq number (car numbers) numbers (cdr numbers)) (goto-line number) (cond ((get-text-property (point) 'invisible) ! (put-text-property (point) (progn (forward-line 1) (point)) ! 'invisible nil)) ((assq number gnus-cite-attribution-alist)) (t ! (put-text-property (point) (progn (forward-line 1) (point)) ! 'invisible t))))))) (defun gnus-cite-find-prefix (line) ;; Return citation prefix for LINE. --- 521,539 ---- (set-buffer gnus-article-buffer) (let ((buffer-read-only nil) (numbers (cdr (assoc prefix gnus-cite-prefix-alist))) + (inhibit-point-motion-hooks t) number) (while numbers (setq number (car numbers) numbers (cdr numbers)) (goto-line number) (cond ((get-text-property (point) 'invisible) ! (remove-text-properties (point) (progn (forward-line 1) (point)) ! gnus-hidden-properties)) ((assq number gnus-cite-attribution-alist)) (t ! (add-text-properties (point) (progn (forward-line 1) (point)) ! gnus-hidden-properties))))))) (defun gnus-cite-find-prefix (line) ;; Return citation prefix for LINE. diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-ems.el dgnus/lisp/gnus-ems.el *** pub/dgnus/lisp/gnus-ems.el Mon May 15 16:22:23 1995 --- dgnus/lisp/gnus-ems.el Mon May 15 13:34:56 1995 *************** *** 0 **** --- 1,94 ---- + ;;; gnus-ems --- functions for making Gnus work under different Emacsii + ;; Copyright (C) 1995 Free Software Foundation, Inc. + + ;; Author: Lars Magne Ingebrigtsen + ;; Keywords: news + + ;; This file is part of GNU Emacs. + + ;; GNU Emacs is free software; you can redistribute it and/or modify + ;; it under the terms of the GNU General Public License as published by + ;; the Free Software Foundation; either version 2, or (at your option) + ;; any later version. + + ;; GNU Emacs is distributed in the hope that it will be useful, + ;; but WITHOUT ANY WARRANTY; without even the implied warranty of + ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ;; GNU General Public License for more details. + + ;; You should have received a copy of the GNU General Public License + ;; along with GNU Emacs; see the file COPYING. If not, write to + ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + + ;;; Commentary: + + ;;; Code: + + (defvar gnus-mouse-2 [mouse-2]) + (defvar gnus-easymenu 'easymenu) + + ;; We do not byte-compile this file, because error messages are such a + ;; bore. + + (eval + '(cond + ((string-match "XEmacs\\|Lucid" emacs-version) + ;; XEmacs definitions. + + (setq gnus-mouse-2 [button2]) + (setq gnus-easymenu 'auc-menu) + + (or (memq 'underline (list-faces)) + (make-face 'underline)) + (or (face-differs-from-default-p 'underline) + (set-face-underline-p 'underline t)) + (or (fboundp 'set-text-properties) + (defun set-text-properties (start end props &optional buffer) + (if props + (put-text-property start end (car props) (cadr props) buffer) + (remove-text-properties start end ())))) + + (setq ad-activate-on-definition t) + (ad-start-advice) + (ad-activate-defined-function) + (defadvice gnus-set-mouse-face (around gnus-xemacs-set-mouse-face preact) + string) + + (if (not gnus-visual) + () + (setq gnus-group-mode-hook + (cons + (lambda () + (easy-menu-add gnus-group-reading-menu) + (easy-menu-add gnus-group-group-menu) + (easy-menu-add gnus-group-post-menu) + (easy-menu-add gnus-group-misc-menu) + (gnus-install-mouse-tracker)) + gnus-group-mode-hook)) + (setq gnus-summary-mode-hook + (cons + (lambda () + (easy-menu-add gnus-summary-mark-menu) + (easy-menu-add gnus-summary-move-menu) + (easy-menu-add gnus-summary-article-menu) + (easy-menu-add gnus-summary-thread-menu) + (easy-menu-add gnus-summary-misc-menu) + (easy-menu-add gnus-summary-post-menu) + (easy-menu-add gnus-summary-kill-menu) + (gnus-install-mouse-tracker)) + gnus-summary-mode-hook)) + (setq gnus-article-mode-hook + (cons + (lambda () + (easy-menu-add gnus-article-article-menu) + (easy-menu-add gnus-article-treatment-menu)) + gnus-article-mode-hook))) + + (defun gnus-install-mouse-tracker () + (require 'mode-motion) + (setq mode-motion-hook 'mode-motion-highlight-line))) + )) + + (provide 'gnus-ems) + + ;;; gnus-ems.el ends here diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-msg.el dgnus/lisp/gnus-msg.el *** pub/dgnus/lisp/gnus-msg.el Sat May 13 15:23:58 1995 --- dgnus/lisp/gnus-msg.el Sun May 14 20:34:47 1995 *************** *** 1,4 **** ! ;;; gnus-message --- mail and post interface for Gnus ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA --- 1,4 ---- ! ;;; gnus-msg --- mail and post interface for Gnus ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA *************** *** 390,430 **** (save-excursion (save-restriction (widen) ! (message "Sending via mail...") (if gnus-mail-courtesy-message (progn ;; Insert "courtesy" mail message. ! (goto-char 1) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$")) (forward-line 1) (insert gnus-mail-courtesy-message) (funcall gnus-mail-send-method) ! (goto-char 1) (search-forward gnus-mail-courtesy-message) (replace-match "" t t)) (funcall gnus-mail-send-method)) ! (message "Sending via mail... done") ! (goto-char 1) (narrow-to-region 1 (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$"))) ! (goto-char 1) (delete-matching-lines "BCC:.*"))) (ding) ! (message "No mailer defined. To: and/or Cc: fields ignored.") (sit-for 1)))) ;; Send to NNTP server. ! (message "Posting to USENET...") (if (gnus-inews-article use-group-method) (progn ! (message "Posting to USENET... done") (if (gnus-buffer-exists-p (car-safe reply)) (progn (save-excursion --- 390,431 ---- (save-excursion (save-restriction (widen) ! (gnus-message 5 "Sending via mail...") (if gnus-mail-courtesy-message (progn ;; Insert "courtesy" mail message. ! (goto-char (point-min)) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$")) (forward-line 1) (insert gnus-mail-courtesy-message) (funcall gnus-mail-send-method) ! (goto-char (point-min)) (search-forward gnus-mail-courtesy-message) (replace-match "" t t)) (funcall gnus-mail-send-method)) ! (gnus-message 5 "Sending via mail... done") ! (goto-char (point-min)) (narrow-to-region 1 (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$"))) ! (goto-char (point-min)) (delete-matching-lines "BCC:.*"))) (ding) ! (gnus-message ! 1 "No mailer defined. To: and/or Cc: fields ignored.") (sit-for 1)))) ;; Send to NNTP server. ! (gnus-message 5 "Posting to USENET...") (if (gnus-inews-article use-group-method) (progn ! (gnus-message 5 "Posting to USENET... done") (if (gnus-buffer-exists-p (car-safe reply)) (progn (save-excursion *************** *** 432,439 **** (gnus-summary-mark-article-as-replied (cdr reply)))))) ;; We cannot signal an error. ! (ding) (message "Article rejected: %s" ! (gnus-status-message gnus-select-method))) (set-buffer-modified-p nil)) ;; If NNTP server is opened by gnus-inews-news, close it by myself. (or server-running --- 433,440 ---- (gnus-summary-mark-article-as-replied (cdr reply)))))) ;; We cannot signal an error. ! (ding) (gnus-message 1 "Article rejected: %s" ! (gnus-status-message gnus-select-method))) (set-buffer-modified-p nil)) ;; If NNTP server is opened by gnus-inews-news, close it by myself. (or server-running *************** *** 578,584 **** (downcase (mail-strip-quoted-names from)) (downcase (mail-strip-quoted-names (gnus-inews-user-name))))) (progn ! (ding) (message "This article is not yours.")) ;; Make control article. (set-buffer (get-buffer-create " *Gnus-canceling*")) (buffer-disable-undo (current-buffer)) --- 579,585 ---- (downcase (mail-strip-quoted-names from)) (downcase (mail-strip-quoted-names (gnus-inews-user-name))))) (progn ! (ding) (gnus-message 3 "This article is not yours.")) ;; Make control article. (set-buffer (get-buffer-create " *Gnus-canceling*")) (buffer-disable-undo (current-buffer)) *************** *** 589,600 **** mail-header-separator "\n" "This is a cancel message from " from ".\n") ;; Send the control article to NNTP server. ! (message "Canceling your article...") (if (gnus-inews-article) ! (message "Canceling your article... done") (ding) ! (message "Cancel failed; %s" ! (gnus-status-message gnus-newsgroup-name))) ;; Kill the article buffer. (kill-buffer (current-buffer))))))) --- 590,601 ---- mail-header-separator "\n" "This is a cancel message from " from ".\n") ;; Send the control article to NNTP server. ! (gnus-message 5 "Canceling your article...") (if (gnus-inews-article) ! (gnus-message 5 "Canceling your article... done") (ding) ! (gnus-message 1 "Cancel failed; %s" ! (gnus-status-message gnus-newsgroup-name))) ;; Kill the article buffer. (kill-buffer (current-buffer))))))) *************** *** 1283,1286 **** (provide 'gnus-msg) ! ;;; gnus-message.el ends here --- 1284,1287 ---- (provide 'gnus-msg) ! ;;; gnus-msg.el ends here diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-score.el dgnus/lisp/gnus-score.el *** pub/dgnus/lisp/gnus-score.el Sat May 13 15:23:58 1995 --- dgnus/lisp/gnus-score.el Mon May 15 14:07:48 1995 *************** *** 27,32 **** --- 27,53 ---- (require 'gnus) + (defvar gnus-score-find-score-files-function 'gnus-score-find-bnews + "*Function used to find SCORE files. + The function will be called with the group name as the argument, and + should return a list of score files to apply to that group. The score + files do not actually have to exist. + + Predefined values are: + + gnus-score-find-single: Only apply the group's own SCORE file. + gnus-score-find-hierarchical: Also apply SCORE files from parent groups. + gnus-score-find-bnews: Apply SCORE files whose names matches. + + See the documentation to these functions for more information. + + This variable can also be a list of functions to be called. Each + function should either return a list of score files, or a list of + score alists.") + + (defvar gnus-adaptive-file-suffix "ADAPT" + "*Suffix of the adaptive score files.") + (defvar gnus-score-expiry-days 7 "*Number of days before unused score file entries are expired.") *************** *** 49,56 **** ;; Internal variables. (defvar gnus-current-score-file nil) - (defvar gnus-adaptive-score-alist gnus-default-adaptive-score-alist) (defvar gnus-score-alist nil --- 70,78 ---- ;; Internal variables. + (defvar gnus-internal-global-score-files nil) + (defvar gnus-score-file-list nil) (defvar gnus-current-score-file nil) (defvar gnus-adaptive-score-alist gnus-default-adaptive-score-alist) (defvar gnus-score-alist nil *************** *** 799,807 **** (defun gnus-score-change-score-file (file) "Change current score alist." ! (interactive ! (list (completing-read "Score file: " gnus-score-cache))) ! (setq gnus-current-score-file file) (gnus-score-load-file file) (gnus-set-mode-line 'summary)) --- 821,827 ---- (defun gnus-score-change-score-file (file) "Change current score alist." ! (interactive (list (completing-read "Score file: " gnus-score-cache))) (gnus-score-load-file file) (gnus-set-mode-line 'summary)) *************** *** 814,821 **** (pop-to-buffer (find-file-noselect file)) (make-local-variable 'gnus-prev-winconf) (setq gnus-prev-winconf winconf)) ! (message (substitute-command-keys ! "\\\\[gnus-score-edit-done] to save edits")) (gnus-score-mode)) (defun gnus-score-edit-file (file) --- 834,842 ---- (pop-to-buffer (find-file-noselect file)) (make-local-variable 'gnus-prev-winconf) (setq gnus-prev-winconf winconf)) ! (gnus-message ! 4 (substitute-command-keys ! "\\\\[gnus-score-edit-done] to save edits")) (gnus-score-mode)) (defun gnus-score-edit-file (file) *************** *** 828,835 **** (pop-to-buffer (find-file-noselect file)) (make-local-variable 'gnus-prev-winconf) (setq gnus-prev-winconf winconf)) ! (message (substitute-command-keys ! "\\\\[gnus-score-edit-done] to save edits")) (gnus-score-mode)) (defun gnus-score-load-file (file) --- 849,857 ---- (pop-to-buffer (find-file-noselect file)) (make-local-variable 'gnus-prev-winconf) (setq gnus-prev-winconf winconf)) ! (gnus-message ! 4 (substitute-command-keys ! "\\\\[gnus-score-edit-done] to save edits")) (gnus-score-mode)) (defun gnus-score-load-file (file) *************** *** 888,899 **** (if orphan (setq gnus-orphan-score orphan)) (setq gnus-adaptive-score-alist (cond ((equal adapt '(t)) gnus-default-adaptive-score-alist) ((equal adapt '(ignore)) ! nil) ((consp adapt) adapt) (t gnus-default-adaptive-score-alist))) (setq gnus-summary-mark-below (or mark mark-and-expunge gnus-summary-mark-below)) --- 910,924 ---- (if orphan (setq gnus-orphan-score orphan)) (setq gnus-adaptive-score-alist (cond ((equal adapt '(t)) + (setq gnus-newsgroup-adaptive t) gnus-default-adaptive-score-alist) ((equal adapt '(ignore)) ! (setq gnus-newsgroup-adaptive nil)) ((consp adapt) + (setq gnus-newsgroup-adaptive t) adapt) (t + (setq gnus-newsgroup-adaptive gnus-use-adaptive-scoring) gnus-default-adaptive-score-alist))) (setq gnus-summary-mark-below (or mark mark-and-expunge gnus-summary-mark-below)) *************** *** 934,940 **** (read (current-buffer)) (error (progn ! (message "Problem with score file %s" file) (ding) (sit-for 2) nil)))))) --- 959,965 ---- (read (current-buffer)) (error (progn ! (gnus-message 3 "Problem with score file %s" file) (ding) (sit-for 2) nil)))))) *************** *** 950,956 **** ((null alist) nil) ((not (consp alist)) ! (message "Score file is not a list: %s" file) (ding) nil) (t --- 975,981 ---- ((null alist) nil) ((not (consp alist)) ! (gnus-message 1 "Score file is not a list: %s" file) (ding) nil) (t *************** *** 958,968 **** err) (while (and a (not err)) (cond ((not (listp (car a))) ! (message "Illegal score element %s in %s" (car a) file) (setq err t)) ((and (stringp (car (car a))) (not (listp (nth 1 (car a))))) ! (message "Illegal header match %s in %s" (nth 1 (car a)) file) (setq err t)) (t (setq a (cdr a))))) --- 983,993 ---- err) (while (and a (not err)) (cond ((not (listp (car a))) ! (gnus-message 3 "Illegal score element %s in %s" (car a) file) (setq err t)) ((and (stringp (car (car a))) (not (listp (nth 1 (car a))))) ! (gnus-message 3 "Illegal header match %s in %s" (nth 1 (car a)) file) (setq err t)) (t (setq a (cdr a))))) *************** *** 1017,1023 **** (setq score (setcdr entry (delq (assq 'touched score) score))) (erase-buffer) (let (emacs-lisp-mode-hook) ! (pp score (current-buffer))) (gnus-make-directory (file-name-directory file)) (write-region (point-min) (point-max) file nil 'silent)))) (kill-buffer (current-buffer))))) --- 1042,1055 ---- (setq score (setcdr entry (delq (assq 'touched score) score))) (erase-buffer) (let (emacs-lisp-mode-hook) ! (if (string-match (concat gnus-adaptive-file-suffix) file) ! ;; This is an adaptive score file, so we do not run ! ;; it through `pp'. These files can get huge, and ! ;; are not meant to be edited by human hands. ! (insert (format "%S" score)) ! ;; This is a normal score file, so we print it very ! ;; prettily. ! (pp score (current-buffer)))) (gnus-make-directory (file-name-directory file)) (write-region (point-min) (point-max) file nil 'silent)))) (kill-buffer (current-buffer))))) *************** *** 1057,1063 **** (expire (- now gnus-score-expiry-days)) (headers gnus-newsgroup-headers) entry header) ! (message "Scoring...") ;; Create articles, an alist of the form `(HEADER . SCORE)'. (while headers (setq header (car headers) --- 1089,1095 ---- (expire (- now gnus-score-expiry-days)) (headers gnus-newsgroup-headers) entry header) ! (gnus-message 5 "Scoring...") ;; Create articles, an alist of the form `(HEADER . SCORE)'. (while headers (setq header (car headers) *************** *** 1103,1109 **** gnus-newsgroup-scored))) (setq gnus-scores-articles (cdr gnus-scores-articles))) ! (message "Scoring...done"))))) (defun gnus-get-new-thread-ids (articles) --- 1135,1141 ---- gnus-newsgroup-scored))) (setq gnus-scores-articles (cdr gnus-scores-articles))) ! (gnus-message 5 "Scoring...done"))))) (defun gnus-get-new-thread-ids (articles) *************** *** 1293,1299 **** (setq request-func 'gnus-request-article))) (while articles (setq article (header-number (car (car articles)))) ! (message "Scoring on article %s..." article) (if (not (funcall request-func article gnus-newsgroup-name)) () (widen) --- 1325,1331 ---- (setq request-func 'gnus-request-article))) (while articles (setq article (header-number (car (car articles)))) ! (gnus-message 7 "Scoring on article %s..." article) (if (not (funcall request-func article gnus-newsgroup-name)) () (widen) *************** *** 1360,1368 **** --- 1392,1406 ---- (defun gnus-score-followup (scores header now expire) ;; Insert the unique article headers in the buffer. (let ((gnus-score-index (nth 1 (assoc header gnus-header-index))) + (current-score-file gnus-current-score-file) ;; gnus-score-index is used as a free variable. alike last this art entries alist articles) + ;; Change score file to the adaptive score file. All entries that + ;; this function makes will be put into this file. + (gnus-score-load-file (gnus-score-file-name + gnus-newsgroup-name gnus-adaptive-file-suffix)) + (setq gnus-scores-articles (sort gnus-scores-articles 'gnus-score-string<) articles gnus-scores-articles) *************** *** 1438,1444 **** (gnus-score-set 'touched '(t) alist) (setcdr entries (cdr rest)) (setq rest entries))) ! (setq entries rest)))))) (defun gnus-score-add-followups (header score) (save-excursion --- 1476,1484 ---- (gnus-score-set 'touched '(t) alist) (setcdr entries (cdr rest)) (setq rest entries))) ! (setq entries rest)))) ! ;; We change the score file back to the previous one. ! (gnus-score-load-file current-score-file))) (defun gnus-score-add-followups (header score) (save-excursion *************** *** 1659,1664 **** --- 1699,1707 ---- (downcase (symbol-name (car (car elem))))))) (setq elem (cdr elem))) (setq malist (cdr malist))) + ;; We change the score file to the adaptive score file. + (gnus-score-load-file (gnus-score-file-name + gnus-newsgroup-name gnus-adaptive-file-suffix)) ;; The we score away. (goto-char (point-min)) (while (not (eobp)) *************** *** 1699,1704 **** --- 1742,1750 ---- (setq malist (cdr malist))) ;; The we score away. (goto-char (point-min)) + ;; We change the score file to the adaptive score file. + (gnus-score-load-file (gnus-score-file-name + gnus-newsgroup-name gnus-adaptive-file-suffix)) (while (re-search-forward marks nil t) (beginning-of-line) (setq elem (cdr (assq (gnus-summary-article-mark) alist))) *************** *** 1756,1761 **** --- 1802,2004 ---- (and winconf (set-window-configuration winconf)) (gnus-score-remove-from-cache bufnam) (gnus-score-load-file bufnam))) + + ;;; Finding score files. + + (defvar gnus-global-score-files nil + "*List of global score files and directories. + Set this variable if you want to use people's score files. One entry + for each score file or each score file directory. Gnus will decide + by itself what score files are applicable to which group. + + Say you want to use the single score file + \"/ftp.ifi.uio.no@ftp:/pub/larsi/ding/score/soc.motss.SCORE\" and all + score files in the \"/ftp.some-where:/pub/score\" directory. + + (setq gnus-global-score-files + '(\"/ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE\" + \"/ftp.some-where:/pub/score\"))") + + (defun gnus-score-score-files (group) + "Return a list of all possible score files." + ;; Search and set any global score files. + (and gnus-global-score-files + (or gnus-internal-global-score-files + (gnus-score-search-global-directories gnus-global-score-files))) + ;; Fix the kill-file dir variable. + (setq gnus-kill-files-directory + (file-name-as-directory + (or gnus-kill-files-directory "~/News/"))) + ;; If er can't read it, there's no score files. + (if (not (file-readable-p gnus-kill-files-directory)) + (setq gnus-score-file-list nil) + (if (gnus-use-long-file-name 'not-score) + ;; We want long file names. + (if (or (not gnus-score-file-list) + (gnus-file-newer-than gnus-kill-files-directory + (car gnus-score-file-list))) + (setq gnus-score-file-list + (cons (nth 5 (file-attributes gnus-kill-files-directory)) + (nreverse + (directory-files + gnus-kill-files-directory t + (gnus-score-file-regexp)))))) + ;; We do not use long file names, so we have to do some + ;; directory traversing. + (let ((dir (expand-file-name + (concat gnus-kill-files-directory + (gnus-replace-chars-in-string group ?. ?/)))) + (mdir (length (expand-file-name gnus-kill-files-directory))) + (suffixes (list gnus-score-file-suffix gnus-adaptive-file-suffix)) + files suffix) + (while suffixes + (setq suffix (car suffixes) + suffixes (cdr suffixes)) + (if (file-exists-p (concat dir "/" suffix)) + (setq files (list (concat dir "/" suffix)))) + (while (>= (1+ (length dir)) mdir) + (and (file-exists-p (concat dir "/all/" suffix)) + (setq files (cons (concat dir "/all/" suffix) files))) + (string-match "/[^/]*$" dir) + (setq dir (substring dir 0 (match-beginning 0))))) + (setq gnus-score-file-list + (cons nil (nreverse files))))) + (cdr gnus-score-file-list))) + + (defun gnus-score-file-regexp () + (concat "\\(" gnus-score-file-suffix + "\\|" gnus-adaptive-file-suffix "\\)$")) + + (defun gnus-score-find-bnews (group) + "Return a list of score files for GROUP. + The score files are those files in the ~/News directory which matches + GROUP using BNews sys file syntax." + (let* ((sfiles (append (gnus-score-score-files group) + gnus-internal-global-score-files)) + (kill-dir (file-name-as-directory + (expand-file-name gnus-kill-files-directory))) + (klen (length kill-dir)) + ofiles not-match regexp) + (save-excursion + (set-buffer (get-buffer-create "*gnus score files*")) + (buffer-disable-undo (current-buffer)) + ;; Go through all score file names and create regexp with them + ;; as the source. + (while sfiles + (erase-buffer) + (insert (car sfiles)) + (goto-char (point-min)) + ;; First remove the suffix itself. + (re-search-forward (concat "." (gnus-score-file-regexp))) + (replace-match "" t t) + (goto-char (point-min)) + (if (looking-at (regexp-quote kill-dir)) + ;; If the file name was just "SCORE", `klen' is one character + ;; too much. + (delete-char (min (1- (point-max)) klen)) + (goto-char (point-max)) + (search-backward "/") + (delete-region (1+ (point)) (point-min))) + ;; Translate "all" to ".*". + (while (search-forward "all" nil t) + (replace-match ".*" t t)) + (goto-char (point-min)) + ;; Deal with "not."s. + (if (looking-at "not.") + (progn + (setq not-match t) + (setq regexp (buffer-substring 5 (point-max)))) + (setq regexp (buffer-substring 1 (point-max))) + (setq not-match nil)) + ;; Finally - if this resulting regexp matches the group name, + ;; we add this score file to the list of score files + ;; applicable to this group. + (if (or (and not-match + (not (string-match regexp group))) + (and (not not-match) + (string-match regexp group))) + (setq ofiles (cons (car sfiles) ofiles))) + (setq sfiles (cdr sfiles))) + (kill-buffer (current-buffer)) + ;; Slight kludge here - the last score file returned should be + ;; the local score file, whether it exists or not. This is so + ;; that any score commands the user enters will go to the right + ;; file, and not end up in some global score file. + (let ((localscore + (expand-file-name + (if (gnus-use-long-file-name 'not-score) + (concat gnus-kill-files-directory group "." + gnus-score-file-suffix) + (concat gnus-kill-files-directory + (gnus-replace-chars-in-string group ?. ?/) + "/" gnus-score-file-suffix))))) + (and (member localscore ofiles) + (delete localscore ofiles)) + (setq ofiles (cons localscore ofiles))) + (nreverse ofiles)))) + + (defun gnus-score-find-single (group) + "Return list containing the score file for GROUP." + (list (gnus-score-file-name group))) + + (defun gnus-score-find-hierarchical (group) + "Return list of score files for GROUP. + This includes the score file for the group and all its parents." + (let ((all (copy-sequence '(nil))) + (start 0)) + (while (string-match "\\." group (1+ start)) + (setq start (match-beginning 0)) + (setq all (cons (substring group 0 start) all))) + (setq all (cons group all)) + (mapcar 'gnus-score-file-name (nreverse all)))) + + (defun gnus-possibly-score-headers () + (let ((func gnus-score-find-score-files-function) + score-files scores) + (and func (not (listp func)) + (setq func (list func))) + ;; Go through all the functions for finding score files (or actual + ;; scores) and add them to a list. + (while func + (and (symbolp (car func)) + (fboundp (car func)) + (setq score-files + (nconc score-files (funcall (car func) gnus-newsgroup-name)))) + (setq func (cdr func))) + (if score-files (gnus-score-headers score-files)))) + + (defun gnus-score-file-name (newsgroup &optional suffix) + "Return the name of a score file for NEWSGROUP." + (let ((suffix (or suffix gnus-score-file-suffix))) + (cond ((or (null newsgroup) + (string-equal newsgroup "")) + ;; The global score file is placed at top of the directory. + (expand-file-name + suffix (or gnus-kill-files-directory "~/News"))) + ((gnus-use-long-file-name 'not-score) + ;; Append ".SCORE" to newsgroup name. + (expand-file-name (concat newsgroup "." suffix) + (or gnus-kill-files-directory "~/News"))) + (t + ;; Place "SCORE" under the hierarchical directory. + (expand-file-name (concat (gnus-newsgroup-directory-form newsgroup) + "/" suffix) + (or gnus-kill-files-directory "~/News")))))) + + (defun gnus-score-search-global-directories (files) + "Scan all global score directories for score files." + ;; Set the variable `gnus-internal-global-score-files' to all + ;; available global score files. + (interactive (list gnus-global-score-files)) + (let (out) + (while files + (if (string-match "/$" (car files)) + (setq out (nconc (directory-files + (car files) t + (concat (gnus-score-file-regexp) "$")))) + (setq out (cons (car files) out))) + (setq files (cdr files))) + (setq gnus-internal-global-score-files out))) (provide 'gnus-score) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-uu.el dgnus/lisp/gnus-uu.el *** pub/dgnus/lisp/gnus-uu.el Sat May 13 15:23:58 1995 --- dgnus/lisp/gnus-uu.el Sun May 14 19:50:17 1995 *************** *** 649,655 **** (save-excursion (save-restriction (set-buffer buffer) ! (goto-char 1) (re-search-forward "\n\n") (setq body (buffer-substring (1- (point)) (point-max))) (narrow-to-region 1 (point)) --- 649,655 ---- (save-excursion (save-restriction (set-buffer buffer) ! (goto-char (point-min)) (re-search-forward "\n\n") (setq body (buffer-substring (1- (point)) (point-max))) (narrow-to-region 1 (point)) *************** *** 657,663 **** (while headers (setq headline (car headers)) (setq headers (cdr headers)) ! (goto-char 1) (if (re-search-forward (concat headline ".*$") nil t) (setq sorthead (concat sorthead (buffer-substring --- 657,663 ---- (while headers (setq headline (car headers)) (setq headers (cdr headers)) ! (goto-char (point-min)) (if (re-search-forward (concat headline ".*$") nil t) (setq sorthead (concat sorthead (buffer-substring *************** *** 711,717 **** (save-excursion (set-buffer buffer) (widen) ! (goto-char 1) (if (not (re-search-forward gnus-uu-binhex-begin-line nil t)) (if (not (re-search-forward gnus-uu-binhex-body-line nil t)) (setq state (list 'wrong-type)))) --- 711,717 ---- (save-excursion (set-buffer buffer) (widen) ! (goto-char (point-min)) (if (not (re-search-forward gnus-uu-binhex-begin-line nil t)) (if (not (re-search-forward gnus-uu-binhex-body-line nil t)) (setq state (list 'wrong-type)))) *************** *** 747,753 **** start-char end-char file-name) (save-excursion (set-buffer process-buffer) ! (goto-char 1) (if (not (re-search-forward gnus-uu-postscript-begin-string nil t)) (setq state (list 'wrong-type)) (beginning-of-line) --- 747,753 ---- start-char end-char file-name) (save-excursion (set-buffer process-buffer) ! (goto-char (point-min)) (if (not (re-search-forward gnus-uu-postscript-begin-string nil t)) (setq state (list 'wrong-type)) (beginning-of-line) *************** *** 822,828 **** (setq beg 1) (setq case-fold-search nil) ! (goto-char 1) (if (looking-at vernum) (progn (replace-match vernum t t) --- 822,828 ---- (setq beg 1) (setq case-fold-search nil) ! (goto-char (point-min)) (if (looking-at vernum) (progn (replace-match vernum t t) *************** *** 931,946 **** (erase-buffer) (insert (car (car string-list))) ;; Translate multiple spaces to one space. ! (goto-char 1) (while (re-search-forward "[ \t]+" nil t) (replace-match " ")) ;; Translate all characters to "a". ! (goto-char 1) (if translate (while (re-search-forward "[A-Za-z]" nil t) (replace-match "a" t t))) ;; Expand numbers. ! (goto-char 1) (while (re-search-forward "[0-9]+" nil t) (replace-match (format "%06d" --- 931,946 ---- (erase-buffer) (insert (car (car string-list))) ;; Translate multiple spaces to one space. ! (goto-char (point-min)) (while (re-search-forward "[ \t]+" nil t) (replace-match " ")) ;; Translate all characters to "a". ! (goto-char (point-min)) (if translate (while (re-search-forward "[A-Za-z]" nil t) (replace-match "a" t t))) ;; Expand numbers. ! (goto-char (point-min)) (while (re-search-forward "[0-9]+" nil t) (replace-match (format "%06d" *************** *** 1108,1114 **** (widen) (erase-buffer) (insert-buffer-substring article-buffer) ! (goto-char 1)))) (if result-files () --- 1108,1114 ---- (widen) (erase-buffer) (insert-buffer-substring article-buffer) ! (goto-char (point-min))))) (if result-files () *************** *** 1145,1157 **** (let ((case-fold-search nil) (buffer-read-only nil)) ! (goto-char 1) (if gnus-uu-kill-carriage-return (progn (while (search-forward "\r" nil t) (delete-backward-char 1)) ! (goto-char 1))) (if (not (re-search-forward gnus-uu-begin-string nil t)) (if (not (re-search-forward gnus-uu-body-line nil t)) --- 1145,1157 ---- (let ((case-fold-search nil) (buffer-read-only nil)) ! (goto-char (point-min)) (if gnus-uu-kill-carriage-return (progn (while (search-forward "\r" nil t) (delete-backward-char 1)) ! (goto-char (point-min)))) (if (not (re-search-forward gnus-uu-begin-string nil t)) (if (not (re-search-forward gnus-uu-body-line nil t)) *************** *** 1252,1258 **** start-char) (save-excursion (set-buffer process-buffer) ! (goto-char 1) (if (not (re-search-forward gnus-uu-shar-begin-string nil t)) (setq state (list 'wrong-type)) (beginning-of-line) --- 1252,1258 ---- start-char) (save-excursion (set-buffer process-buffer) ! (goto-char (point-min)) (if (not (re-search-forward gnus-uu-shar-begin-string nil t)) (setq state (list 'wrong-type)) (beginning-of-line) *************** *** 1267,1273 **** (defun gnus-uu-find-name-in-shar () (let ((oldpoint (point)) res) ! (goto-char 1) (if (re-search-forward gnus-uu-shar-name-marker nil t) (setq res (buffer-substring (match-beginning 1) (match-end 1)))) (goto-char oldpoint) --- 1267,1273 ---- (defun gnus-uu-find-name-in-shar () (let ((oldpoint (point)) res) ! (goto-char (point-min)) (if (re-search-forward gnus-uu-shar-name-marker nil t) (setq res (buffer-substring (match-beginning 1) (match-end 1)))) (goto-char oldpoint) *************** *** 1593,1599 **** (defun gnus-uu-post-encode-uuencode (path file-name) (if (gnus-uu-post-encode-file "uuencode" path file-name) (progn ! (goto-char 1) (forward-line 1) (while (re-search-forward " " nil t) (replace-match "`")) --- 1593,1599 ---- (defun gnus-uu-post-encode-uuencode (path file-name) (if (gnus-uu-post-encode-file "uuencode" path file-name) (progn ! (goto-char (point-min)) (forward-line 1) (while (re-search-forward " " nil t) (replace-match "`")) *************** *** 1615,1621 **** ;; Adds MIME headers. (defun gnus-uu-post-make-mime (file-name encoding) ! (goto-char 1) (insert (format "Content-Type: %s; name=\"%s\"\n" (gnus-uu-choose-action file-name gnus-uu-ext-to-mime-list) file-name)) --- 1615,1621 ---- ;; Adds MIME headers. (defun gnus-uu-post-make-mime (file-name encoding) ! (goto-char (point-min)) (insert (format "Content-Type: %s; name=\"%s\"\n" (gnus-uu-choose-action file-name gnus-uu-ext-to-mime-list) file-name)) *************** *** 1665,1671 **** (cons '(lambda () (save-excursion ! (goto-char 1) (if (re-search-forward "^Message-ID: \\(.*\\)$" nil t) (setq gnus-uu-post-message-id (buffer-substring --- 1665,1671 ---- (cons '(lambda () (save-excursion ! (goto-char (point-min)) (if (re-search-forward "^Message-ID: \\(.*\\)$" nil t) (setq gnus-uu-post-message-id (buffer-substring *************** *** 1720,1726 **** (setq post-buf (current-buffer)) ! (goto-char 1) (if (not (re-search-forward (if gnus-uu-post-separate-description (concat "^" (regexp-quote gnus-uu-post-binary-separator) --- 1720,1726 ---- (setq post-buf (current-buffer)) ! (goto-char (point-min)) (if (not (re-search-forward (if gnus-uu-post-separate-description (concat "^" (regexp-quote gnus-uu-post-binary-separator) *************** *** 1736,1742 **** (set-buffer (setq uubuf (get-buffer-create encoded-buffer-name))) (erase-buffer) (insert-buffer-substring post-buf beg-binary end-binary) ! (goto-char 1) (setq length (count-lines 1 (point-max))) (setq parts (/ length gnus-uu-post-length)) (if (not (< (% length gnus-uu-post-length) 4)) --- 1736,1742 ---- (set-buffer (setq uubuf (get-buffer-create encoded-buffer-name))) (erase-buffer) (insert-buffer-substring post-buf beg-binary end-binary) ! (goto-char (point-min)) (setq length (count-lines 1 (point-max))) (setq parts (/ length gnus-uu-post-length)) (if (not (< (% length gnus-uu-post-length) 4)) *************** *** 1746,1758 **** (forward-line -1)) (kill-region (point) (point-max)) ! (goto-char 1) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$") nil t) (beginning-of-line) (setq header (buffer-substring 1 (point))) ! (goto-char 1) (if (not gnus-uu-post-separate-description) () (if (and (not threaded) (re-search-forward "^Subject: " nil t)) --- 1746,1758 ---- (forward-line -1)) (kill-region (point) (point-max)) ! (goto-char (point-min)) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$") nil t) (beginning-of-line) (setq header (buffer-substring 1 (point))) ! (goto-char (point-min)) (if (not gnus-uu-post-separate-description) () (if (and (not threaded) (re-search-forward "^Subject: " nil t)) *************** *** 1783,1789 **** (make-string (if (= 0 (% whole-len 2)) (1- minlen) minlen) ?-))) ! (goto-char 1) (if (not (re-search-forward "^Subject: " nil t)) () (if (not threaded) --- 1783,1789 ---- (make-string (if (= 0 (% whole-len 2)) (1- minlen) minlen) ?-))) ! (goto-char (point-min)) (if (not (re-search-forward "^Subject: " nil t)) () (if (not threaded) *************** *** 1809,1815 **** (insert "\n") (setq beg end) (setq i (1+ i)) ! (goto-char 1) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$") nil t) (beginning-of-line) --- 1809,1815 ---- (insert "\n") (setq beg end) (setq i (1+ i)) ! (goto-char (point-min)) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$") nil t) (beginning-of-line) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-vis.el dgnus/lisp/gnus-vis.el *** pub/dgnus/lisp/gnus-vis.el Sat May 13 15:23:59 1995 --- dgnus/lisp/gnus-vis.el Mon May 15 19:20:56 1995 *************** *** 1,7 **** ! ;;; gnus-vis: display-oriented parts of Gnus. ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news ;; This file is part of GNU Emacs. --- 1,8 ---- ! ;;; gnus-vis --- display-oriented parts of Gnus ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen + ;; Per Abrahamsen ;; Keywords: news ;; This file is part of GNU Emacs. *************** *** 25,31 **** ;;; Code: (require 'gnus) ! (require (if gnus-xemacs 'auc-menu 'easymenu)) ;;; summary highligts --- 26,32 ---- ;;; Code: (require 'gnus) ! (require gnus-easymenu) ;;; summary highligts *************** *** 53,70 **** ;;; article highlights - (defvar gnus-face-light-name-list - '("light blue" "light cyan" "light yellow" "light pink" - "pale green" "beige" "orange" "magenta" "violet" "medium purple" - "turquoise") - "Names of light colors.") - - (defvar gnus-face-dark-name-list - '("blue" "dark salmon" "firebrick" - "dark green" "dark orange" "dark khaki" "dark violet" - "dark turquoise") - "Names of dark colors.") - (defvar gnus-make-foreground t "Non nil means foreground color to highlight citations.") --- 54,59 ---- *************** *** 86,94 **** The first non-nil NAME or CONTENT with a matching REGEXP in the list will be used.") - (defvar gnus-signature-separator "^-- *$" - "Regexp matching signature separator.") - (defvar gnus-signature-face 'italic "Face used for signature.") --- 75,80 ---- *************** *** 524,547 **** ;;; summary highlights ;;; - (if gnus-xemacs - (defun gnus-highlight-selected-summary () - (if gnus-summary-selected-face - (save-excursion - (let* ((beg (progn (beginning-of-line) (point))) - (end (progn (end-of-line) (point))) - (from (or - (next-single-property-change beg 'mouse-face nil end) - beg)) - (to (or (next-single-property-change from 'mouse-face nil end) - end))) - (if gnus-newsgroup-selected-overlay - (move-overlay gnus-newsgroup-selected-overlay - from to (current-buffer)) - (setq gnus-newsgroup-selected-overlay (make-overlay from to)) - (overlay-put gnus-newsgroup-selected-overlay 'face - gnus-summary-selected-face)))))) - (defun gnus-highlight-selected-summary () ;; Added by Per Abrahamsen . ;; Highlight selected article in summary buffer --- 510,515 ---- *************** *** 549,558 **** (save-excursion (let* ((beg (progn (beginning-of-line) (point))) (end (progn (end-of-line) (point))) ! (to (max 1 (1- (previous-single-property-change ! end 'mouse-face nil beg)))) ! (from (1+ (next-single-property-change ! beg 'mouse-face nil end)))) (if (< to beg) (progn (setq from beg) --- 517,526 ---- (save-excursion (let* ((beg (progn (beginning-of-line) (point))) (end (progn (end-of-line) (point))) ! (to (max 1 (1- (or (previous-single-property-change ! end 'mouse-face nil beg) end)))) ! (from (1+ (or (next-single-property-change ! beg 'mouse-face nil end) beg)))) (if (< to beg) (progn (setq from beg) *************** *** 563,569 **** (setq gnus-newsgroup-selected-overlay (make-overlay from to)) (overlay-put gnus-newsgroup-selected-overlay 'face gnus-summary-selected-face)))))) - ) ;; New implementation by Christian Limpach . --- 531,536 ---- *************** *** 586,630 **** (let ((face (and list (cdr (car list))))) ;; BUG! For some reason the text properties of the first ;; characters get mangled. ! (or (eq face (get-text-property beg 'face)) (put-text-property beg end 'face face))) (goto-char p))) - (defvar mode-motion-hook nil) - (defun gnus-install-mouse-tracker () - (require 'mode-motion) - (setq mode-motion-hook 'mode-motion-highlight-line)) - - (if (not gnus-xemacs) - () - (setq gnus-group-mode-hook - (cons - (lambda () - (easy-menu-add gnus-group-reading-menu) - (easy-menu-add gnus-group-group-menu) - (easy-menu-add gnus-group-post-menu) - (easy-menu-add gnus-group-misc-menu) - (gnus-install-mouse-tracker)) - gnus-group-mode-hook)) - (setq gnus-summary-mode-hook - (cons - (lambda () - (easy-menu-add gnus-summary-mark-menu) - (easy-menu-add gnus-summary-move-menu) - (easy-menu-add gnus-summary-article-menu) - (easy-menu-add gnus-summary-thread-menu) - (easy-menu-add gnus-summary-misc-menu) - (easy-menu-add gnus-summary-post-menu) - (easy-menu-add gnus-summary-kill-menu) - (gnus-install-mouse-tracker)) - gnus-summary-mode-hook)) - (setq gnus-article-mode-hook - (cons - (lambda () - (easy-menu-add gnus-article-article-menu) - (easy-menu-add gnus-article-treatment-menu)) - gnus-article-mode-hook))) - ;;; ;;; gnus-carpal ;;; --- 553,563 ---- (let ((face (and list (cdr (car list))))) ;; BUG! For some reason the text properties of the first ;; characters get mangled. ! (or (eobp) ! (eq face (get-text-property beg 'face)) (put-text-property beg end 'face face))) (goto-char p))) ;;; ;;; gnus-carpal ;;; *************** *** 797,805 **** ;;; Internal Variables: - (defvar gnus-article-length nil) - ;; Length of article last time we parsed it. - (defvar gnus-button-regexp nil) ;; Regexp matching any of the regexps from `gnus-button-alist'. --- 730,735 ---- *************** *** 828,833 **** --- 758,778 ---- (fun (get-text-property (point) 'gnus-callback))) (if fun (funcall fun data)))) + ;; Suggested by Arne Elofsson + (defun gnus-article-next-button () + "Move point to next button." + (interactive) + (if (get-text-property (point) 'gnus-callback) + (goto-char (next-single-property-change (point) 'gnus-callback + nil (point-max)))) + (let ((pos (next-single-property-change (point) 'gnus-callback))) + (if pos + (goto-char pos) + (setq pos (next-single-property-change (point-min) 'gnus-callback)) + (if pos + (goto-char pos) + (error "No buttons found"))))) + (defun gnus-article-highlight () "Highlight current article. This function calls `gnus-article-highlight-headers', *************** *** 863,868 **** --- 808,814 ---- (buffer-read-only nil) (case-fold-search t) (end (point)) + (inhibit-point-motion-hooks t) begin entry regexp header-face field-face header-found field-found) (re-search-backward "^[^ \t]" nil t) (setq begin (point)) *************** *** 898,904 **** (interactive) (save-excursion (set-buffer gnus-article-buffer) ! (let ((buffer-read-only nil)) (goto-char (point-max)) (and (re-search-backward gnus-signature-separator nil t) gnus-signature-face --- 844,851 ---- (interactive) (save-excursion (set-buffer gnus-article-buffer) ! (let ((buffer-read-only nil) ! (inhibit-point-motion-hooks t)) (goto-char (point-max)) (and (re-search-backward gnus-signature-separator nil t) gnus-signature-face *************** *** 910,916 **** (defun gnus-article-hide-signature () "Hide the signature in an article. ! It does this by majing everything after `gnus-signature-separator' invisible." (interactive) (save-excursion (set-buffer gnus-article-buffer) --- 857,863 ---- (defun gnus-article-hide-signature () "Hide the signature in an article. ! It does this by making everything after `gnus-signature-separator' invisible." (interactive) (save-excursion (set-buffer gnus-article-buffer) *************** *** 918,924 **** (goto-char (point-max)) (and (re-search-backward gnus-signature-separator nil t) gnus-signature-face ! (put-text-property (match-end 0) (point-max) 'invisible t))))) (defun gnus-article-add-buttons () "Find external references in article and make them to buttons. --- 865,872 ---- (goto-char (point-max)) (and (re-search-backward gnus-signature-separator nil t) gnus-signature-face ! (add-text-properties (match-end 0) (point-max) ! gnus-hidden-properties))))) (defun gnus-article-add-buttons () "Find external references in article and make them to buttons. *************** *** 934,939 **** --- 882,888 ---- (set-buffer gnus-article-buffer) (gnus-cite-parse-maybe) (let ((buffer-read-only nil) + (inhibit-point-motion-hooks t) (case-fold-search t)) (goto-char (point-min)) (search-forward "\n\n") *************** *** 970,977 **** (set-buffer gnus-article-buffer) (let ((buffer-read-only nil)) (if (get-text-property end 'invisible) ! (put-text-property end (point-max) 'invisible nil) ! (put-text-property end (point-max) 'invisible t))))) (defun gnus-make-face (color) ;; Create entry for face with background COLOR. --- 919,926 ---- (set-buffer gnus-article-buffer) (let ((buffer-read-only nil)) (if (get-text-property end 'invisible) ! (remove-text-properties end (point-max) gnus-hidden-properties) ! (add-text-properties end (point-max) gnus-hidden-properties))))) (defun gnus-make-face (color) ;; Create entry for face with background COLOR. *************** *** 1000,1005 **** --- 949,955 ---- (set-buffer gnus-article-buffer) (goto-char marker) (let* ((entry (gnus-button-entry)) + (inhibit-point-motion-hooks t) (fun (nth 3 entry)) (args (mapcar (lambda (group) (let ((string (buffer-substring diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-vm.el dgnus/lisp/gnus-vm.el *** pub/dgnus/lisp/gnus-vm.el Sat May 13 15:23:59 1995 --- dgnus/lisp/gnus-vm.el Mon May 15 19:20:56 1995 *************** *** 27,38 **** ;; Some code stolen from: ;; Rick Sladkey ! (eval-after-load ! "gnus-vm" ! (require 'vm)) ! (require 'gnus) ! ! (eval-and-compile (autoload 'vm-mode "vm") (autoload 'vm-save-message "vm") (autoload 'vm-forward-message "vm") --- 27,33 ---- ;; Some code stolen from: ;; Rick Sladkey ! (eval-when-compile (autoload 'vm-mode "vm") (autoload 'vm-save-message "vm") (autoload 'vm-forward-message "vm") *************** *** 40,52 **** (autoload 'vm-mail "vm")) (defvar gnus-vm-inhibit-window-system nil ! "*Inhibit loading `win-vm' if using a window-system.") (or gnus-vm-inhibit-window-system (condition-case nil (if window-system (require 'win-vm)) (error nil))) (defun gnus-vm-make-folder (&optional buffer) (let ((article (or buffer (current-buffer))) --- 35,53 ---- (autoload 'vm-mail "vm")) (defvar gnus-vm-inhibit-window-system nil ! "Inhibit loading `win-vm' if using a window-system. ! Has to be set before gnus-vm is loaded.") (or gnus-vm-inhibit-window-system (condition-case nil (if window-system (require 'win-vm)) (error nil))) + + (if (not (featurep 'vm)) + (load "vm")) + + (require 'gnus) (defun gnus-vm-make-folder (&optional buffer) (let ((article (or buffer (current-buffer))) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus.el dgnus/lisp/gnus.el *** pub/dgnus/lisp/gnus.el Sat May 13 15:24:00 1995 --- dgnus/lisp/gnus.el Mon May 15 20:11:04 1995 *************** *** 36,41 **** --- 36,42 ---- (require 'mail-utils) (require 'timezone) (require 'nnheader) + (require 'gnus-ems) ;; Site dependent variables. These variables should be defined in ;; paths.el. *************** *** 252,257 **** --- 253,264 ---- (defvar gnus-asynchronous-article-function nil "*Function for picking articles to pre-fetch, possibly.") + (defvar gnus-score-file-suffix "SCORE" + "*Suffix of the score files.") + + (defvar gnus-score-interactive-default-score 1000 + "*Scoring commands will raise/lower the score with this number as the default.") + (defvar gnus-large-newsgroup 200 "*The number of articles which indicates a large newsgroup. If the number of articles in a newsgroup is greater than this value, *************** *** 314,320 **** * gnus-summary-save-in-rmail (Rmail format) * gnus-summary-save-in-mail (Unix mail format) * gnus-summary-save-in-folder (MH folder) ! * gnus-summary-save-in-file (article format).") (defvar gnus-rmail-save-name (function gnus-plain-save-name) "*A function generating a file name to save articles in Rmail format. --- 321,328 ---- * gnus-summary-save-in-rmail (Rmail format) * gnus-summary-save-in-mail (Unix mail format) * gnus-summary-save-in-folder (MH folder) ! * gnus-summary-save-in-file (article format). ! * gnus-summary-save-in-vm (use VM's folder format).") (defvar gnus-rmail-save-name (function gnus-plain-save-name) "*A function generating a file name to save articles in Rmail format. *************** *** 344,364 **** '((\"^Subject:.*gnus\\|^Newsgroups:.*gnus\" \"gnus-stuff\") (\"^Subject:.*vm\\|^Xref:.*vm\" \"vm-stuff\"))") - (defvar gnus-score-interactive-default-score 1000 - "*Scoring commands will raise/lower the score with this number as the default.") - (defvar gnus-save-score nil "*If non-nil, save group scoring info.") - (defvar gnus-score-file-suffix "SCORE" - "*Suffix of the score files.") - (defvar gnus-use-adaptive-scoring nil "*If non-nil, use some adaptive scoring scheme.") (defvar gnus-use-cache nil "*If non-nil, Gnus will cache (some) articles locally.") (defvar gnus-fetch-old-headers nil "*Non-nil means that Gnus will try to build threads by grabbing old headers. If an unread article in the group refers to an older, already read (or --- 352,369 ---- '((\"^Subject:.*gnus\\|^Newsgroups:.*gnus\" \"gnus-stuff\") (\"^Subject:.*vm\\|^Xref:.*vm\" \"vm-stuff\"))") (defvar gnus-save-score nil "*If non-nil, save group scoring info.") (defvar gnus-use-adaptive-scoring nil "*If non-nil, use some adaptive scoring scheme.") (defvar gnus-use-cache nil "*If non-nil, Gnus will cache (some) articles locally.") + (defvar gnus-use-scoring t + "*If non-nil, enable scoring.") + (defvar gnus-fetch-old-headers nil "*Non-nil means that Gnus will try to build threads by grabbing old headers. If an unread article in the group refers to an older, already read (or *************** *** 385,390 **** --- 390,402 ---- "*Non-nil means that you will never be asked for confirmation about anything. And that means *anything*.") + (defvar gnus-verbose 7 + "*Integer that says how verbose Gnus should be. + The higher the number, the more messages Gnus will flash to say what + it's doing. At zero, Gnus will be totally mute; at five, Gnus will + display most important messages; and at ten, Gnus will keep on + jabbering all the time.") + (defvar gnus-keep-same-level nil "*Non-nil means that the next newsgroup after the current will be on the same level. When you type, for instance, `n' after reading the last article in the *************** *** 646,654 **** be placed first in the article buffer in the sequence specified by this list.") - (defvar gnus-check-before-posting t - "In non-nil, Gnus will attempt to run some checks on outgoing posts.") - (defvar gnus-required-headers '(From Date Newsgroups Subject Message-ID Organization Lines X-Newsreader) "*Headers to be generated or prompted for when posting an article. --- 658,663 ---- *************** *** 662,667 **** --- 671,682 ---- (defvar gnus-save-all-headers t "*If non-nil, don't remove any headers before saving.") + (defvar gnus-signature-separator "^-- *$" + "Regexp matching signature separator.") + + (defvar gnus-check-before-posting t + "In non-nil, Gnus will attempt to run some checks on outgoing posts.") + (defvar gnus-inhibit-startup-message nil "*If non-nil, the startup message will not be displayed.") *************** *** 792,809 **** (defvar gnus-mail-reply-method (function gnus-mail-reply-using-mail) "*Function to compose a reply. ! Two pre-made functions are `gnus-mail-reply-using-mail' (sendmail) and ! `gnus-mail-reply-using-mhe' (MH-E).") (defvar gnus-mail-forward-method (function gnus-mail-forward-using-mail) "*Function to forward the current message to another user. ! Two pre-made functions are `gnus-mail-forward-using-mail' (sendmail) ! and `gnus-mail-forward-using-mhe' (MH-E).") (defvar gnus-mail-other-window-method 'gnus-mail-other-window-using-mail "*Function to compose mail in the other window. ! Two pre-made functions are `gnus-mail-other-window-using-mail' ! (sendmail) and `gnus-mail-other-window-using-mhe' (MH-E).") (defvar gnus-mail-send-method send-mail-function "*Function to mail a message which is also being posted as an article. --- 807,825 ---- (defvar gnus-mail-reply-method (function gnus-mail-reply-using-mail) "*Function to compose a reply. ! Three pre-made functions are `gnus-mail-reply-using-mail' (sendmail); ! `gnus-mail-reply-using-mhe' (MH-E); and `gnus-mail-reply-using-vm'.") (defvar gnus-mail-forward-method (function gnus-mail-forward-using-mail) "*Function to forward the current message to another user. ! Three pre-made functions are `gnus-mail-forward-using-mail' (sendmail); ! `gnus-mail-forward-using-mhe' (MH-E); and `gnus-mail-forward-using-vm'.") (defvar gnus-mail-other-window-method 'gnus-mail-other-window-using-mail "*Function to compose mail in the other window. ! Three pre-made functions are `gnus-mail-other-window-using-mail' ! (sendmail); `gnus-mail-other-window-using-mhe' (MH-E); and ! `gnus-mail-other-window-using-vm'.") (defvar gnus-mail-send-method send-mail-function "*Function to mail a message which is also being posted as an article. *************** *** 1083,1106 **** Some functions you can use are `+', `max', or `min'.") - (defvar gnus-score-find-score-files-function 'gnus-score-find-bnews - "*Function used to find SCORE files. - The function will be called with the group name as the argument, and - should return a list of score files to apply to that group. The score - files do not actually have to exist. - - Predefined values are: - - gnus-score-find-single: Only apply the group's own SCORE file. - gnus-score-find-hierarchical: Also apply SCORE files from parent groups. - gnus-score-find-bnews: Apply SCORE files whose names matches. - - See the documentation to these functions for more information. - - This variable can also be a list of functions to be called. Each - function should either return a list of score files, or a list of - score alists.") - (defvar gnus-options-subscribe nil "*All new groups matching this regexp will be subscribed unconditionally. Note that this variable deals only with new newsgroups. This variable --- 1099,1104 ---- *************** *** 1264,1275 **** The hook is intended to mark an article as read (or unread) automatically when it is selected.") ;; Internal variables - (defvar gnus-internal-global-score-files nil) - (defvar gnus-score-file-list nil) - ;; Avoid highlighting in kill files. (defvar gnus-summary-inhibit-highlight nil) (defvar gnus-newsgroup-selected-overlay nil) --- 1262,1273 ---- The hook is intended to mark an article as read (or unread) automatically when it is selected.") + (defvar gnus-hidden-properties '(invisible t intangible t) + "Property list to use for hiding text.") + ;; Internal variables ;; Avoid highlighting in kill files. (defvar gnus-summary-inhibit-highlight nil) (defvar gnus-newsgroup-selected-overlay nil) *************** *** 1289,1294 **** --- 1287,1294 ---- (defvar gnus-newsgroup-async nil) (defconst gnus-group-edit-buffer "*Gnus edit newsgroup*") + (defvar gnus-newsgroup-adaptive nil) + (defconst gnus-group-line-format-alist (list (list ?M 'marked ?c) (list ?S 'subscribed ?c) *************** *** 1376,1382 **** (defconst gnus-maintainer "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls & Boys)" "The mail address of the Gnus maintainer.") ! (defconst gnus-version "(ding) Gnus v0.69" "Version number for this version of Gnus.") (defvar gnus-info-nodes --- 1376,1382 ---- (defconst gnus-maintainer "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls & Boys)" "The mail address of the Gnus maintainer.") ! (defconst gnus-version "(ding) Gnus v0.70" "Version number for this version of Gnus.") (defvar gnus-info-nodes *************** *** 1562,1568 **** gnus-newsgroup-threads gnus-newsgroup-async gnus-score-alist gnus-current-score-file gnus-summary-expunge-below gnus-summary-mark-below gnus-newsgroup-active gnus-scores-exclude-files ! gnus-newsgroup-history gnus-newsgroup-ancient) "Variables that are buffer-local to the summary buffers.") ;;; End of variables. --- 1562,1569 ---- gnus-newsgroup-threads gnus-newsgroup-async gnus-score-alist gnus-current-score-file gnus-summary-expunge-below gnus-summary-mark-below gnus-newsgroup-active gnus-scores-exclude-files ! gnus-newsgroup-history gnus-newsgroup-ancient ! gnus-newsgroup-adaptive) "Variables that are buffer-local to the summary buffers.") ;;; End of variables. *************** *** 1618,1627 **** (autoload 'gnus-article-press-button "gnus-vis" nil t) (autoload 'gnus-article-highlight "gnus-vis" nil t) (autoload 'gnus-article-hide "gnus-vis" nil t) (autoload 'gnus-article-highlight-headers "gnus-vis" nil t) (autoload 'gnus-article-highlight-signature "gnus-vis" nil t) (autoload 'gnus-article-add-buttons "gnus-vis" nil t) ! (autoload 'gnus-article-add-button "gnus-vis.el") ;; gnus-cite (autoload 'gnus-article-highlight-citation "gnus-cite" nil t) --- 1619,1630 ---- (autoload 'gnus-article-press-button "gnus-vis" nil t) (autoload 'gnus-article-highlight "gnus-vis" nil t) (autoload 'gnus-article-hide "gnus-vis" nil t) + (autoload 'gnus-article-hide-signature "gnus-vis" nil t) (autoload 'gnus-article-highlight-headers "gnus-vis" nil t) (autoload 'gnus-article-highlight-signature "gnus-vis" nil t) (autoload 'gnus-article-add-buttons "gnus-vis" nil t) ! (autoload 'gnus-article-next-button "gnus-vis" nil t) ! (autoload 'gnus-article-add-button "gnus-vis") ;; gnus-cite (autoload 'gnus-article-highlight-citation "gnus-cite" nil t) *************** *** 1654,1659 **** --- 1657,1663 ---- (autoload 'gnus-current-score-file-nondirectory "gnus-score") (autoload 'gnus-score-adaptive "gnus-score") (autoload 'gnus-score-remove-lines-adaptive "gnus-score") + (autoload 'gnus-possibly-score-headers "gnus-score") ;; gnus-uu (autoload 'gnus-uu-extract-map "gnus-uu" nil nil 'keymap) *************** *** 1713,1735 **** (defalias 'gnus-summary-position-cursor 'gnus-goto-colon) (defalias 'gnus-group-position-cursor 'gnus-goto-colon) - ;; Cruft to make Gnus work under GNU XEmacs. - (defconst gnus-xemacs (not (not (string-match "XEmacs\\|Lucid" emacs-version))) - "Non-nil if Gnus is running under GNU XEmacs.") - - (if gnus-xemacs - (progn - (or (memq 'underline (funcall 'list-faces)) - (make-face 'underline)) - (or (face-differs-from-default-p 'underline) - (set-face-underline-p 'underline t)) - (or (fboundp 'set-text-properties) - (defun set-text-properties (start end props &optional buffer) - (if props - (put-text-property start end (car props) - (funcall (intern "cadr") props) buffer) - (remove-text-properties start end ())))))) - ;;; Various macros and substs. (defmacro gnus-eval-in-buffer-window (buffer &rest forms) --- 1717,1722 ---- *************** *** 1825,1831 **** (defun gnus-narrow-to-headers () (widen) (save-excursion ! (goto-char 1) (if (search-forward "\n\n") (narrow-to-region 1 (1- (point)))))) --- 1812,1818 ---- (defun gnus-narrow-to-headers () (widen) (save-excursion ! (goto-char (point-min)) (if (search-forward "\n\n") (narrow-to-region 1 (1- (point)))))) *************** *** 1886,1893 **** (defun gnus-set-mouse-face (string) ;; Set mouse face property on STRING. ! (or gnus-xemacs ! (put-text-property 0 (length string) 'mouse-face gnus-mouse-face string)) string) (defun gnus-parse-format (format spec-alist) --- 1873,1879 ---- (defun gnus-set-mouse-face (string) ;; Set mouse face property on STRING. ! (put-text-property 0 (length string) 'mouse-face gnus-mouse-face string) string) (defun gnus-parse-format (format spec-alist) *************** *** 1923,1929 **** (save-excursion (gnus-set-work-buffer) (insert format) ! (goto-char 1) (while (re-search-forward "%[-0-9]*\\(,[0-9]*\\)*\\(.\\)\\(.\\)?" nil t) (setq spec (string-to-char (buffer-substring (match-beginning 2) (match-end 2)))) --- 1909,1915 ---- (save-excursion (gnus-set-work-buffer) (insert format) ! (goto-char (point-min)) (while (re-search-forward "%[-0-9]*\\(,[0-9]*\\)*\\(.\\)\\(.\\)?" nil t) (setq spec (string-to-char (buffer-substring (match-beginning 2) (match-end 2)))) *************** *** 2168,2174 **** (gnus-group-change-level newsgroup gnus-level-default-subscribed gnus-level-killed (gnus-gethash (or next "dummy.group") gnus-newsrc-hashtb)) ! (message "Subscribe newsgroup: %s" newsgroup)) ;; For directories --- 2154,2160 ---- (gnus-group-change-level newsgroup gnus-level-default-subscribed gnus-level-killed (gnus-gethash (or next "dummy.group") gnus-newsrc-hashtb)) ! (gnus-message 5 "Subscribe newsgroup: %s" newsgroup)) ;; For directories *************** *** 2307,2317 **** gnus-newsgroup-headers-hashtb-by-number nil gnus-newsgroup-name nil gnus-server-alist nil - gnus-internal-global-score-files nil gnus-current-select-method nil) ;; Reset any score variables. (and (boundp 'gnus-score-cache) (set 'gnus-score-cache nil)) ;; Kill the startup file. (and gnus-current-startup-file (get-file-buffer gnus-current-startup-file) --- 2293,2304 ---- gnus-newsgroup-headers-hashtb-by-number nil gnus-newsgroup-name nil gnus-server-alist nil gnus-current-select-method nil) ;; Reset any score variables. (and (boundp 'gnus-score-cache) (set 'gnus-score-cache nil)) + (and (boundp 'gnus-internal-global-score-files) + (set 'gnus-internal-global-score-files nil)) ;; Kill the startup file. (and gnus-current-startup-file (get-file-buffer gnus-current-startup-file) *************** *** 2343,2353 **** (not (and gnus-window-configuration (memq setting '(group summary article))))) setting ! (let* ((setting (if (eq setting 'group) 'newsgroup setting)) (elem (car (cdr (assq setting gnus-window-configuration)))) (total (apply '+ elem)) (types '(group summary article)) ! (pbuf (if (eq setting 'newsgroup) 'group 'summary)) (i 0) perc out) --- 2330,2343 ---- (not (and gnus-window-configuration (memq setting '(group summary article))))) setting ! (let* ((setting (if (eq setting 'group) ! (if (assq 'newsgroup gnus-window-configuration) ! 'newsgroup ! 'newsgroups) setting)) (elem (car (cdr (assq setting gnus-window-configuration)))) (total (apply '+ elem)) (types '(group summary article)) ! (pbuf (if (eq setting 'newsgroups) 'group 'summary)) (i 0) perc out) *************** *** 2491,2497 **** (stringp (symbol-value meth)) (setq mess (concat mess "; " (symbol-value meth)))) (setq methods (cdr methods))) ! (message mess))) (defun gnus-info-find-node () "Find Info documentation of Gnus." --- 2481,2487 ---- (stringp (symbol-value meth)) (setq mess (concat mess "; " (symbol-value meth)))) (setq methods (cdr methods))) ! (gnus-message 2 mess))) (defun gnus-info-find-node () "Find Info documentation of Gnus." *************** *** 2504,2521 **** (defun gnus-bug () "Send a bug report to the Gnus maintainers." (interactive) ! (pop-to-buffer "*Gnus Bug*") ! (erase-buffer) ! (mail-mode) ! (mail-setup gnus-maintainer "[Gnus Bug Report] " nil nil nil nil) ! (goto-char (point-min)) ! (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$")) ! (forward-line 1) ! (insert (format "%s\n%s\n\n\n\n\n" (gnus-version) (emacs-version))) ! (let ((b (point))) ! (gnus-debug) ! (goto-char (- b 3))) ! (message "")) (defun gnus-debug () "Attemps to go through the Gnus source file and report what variables have been changed. --- 2494,2514 ---- (defun gnus-bug () "Send a bug report to the Gnus maintainers." (interactive) ! (let ((winconf (current-window-configuration))) ! (pop-to-buffer "*Gnus Bug*") ! (erase-buffer) ! (mail-mode) ! (mail-setup gnus-maintainer "[Gnus Bug Report] " nil nil nil nil) ! (make-local-variable 'gnus-prev-winconf) ! (setq gnus-prev-winconf winconf) ! (goto-char (point-min)) ! (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$")) ! (forward-line 1) ! (insert (format "%s\n%s\n\n\n\n\n" (gnus-version) (emacs-version))) ! (let ((b (point))) ! (gnus-debug) ! (goto-char (- b 3))) ! (message ""))) (defun gnus-debug () "Attemps to go through the Gnus source file and report what variables have been changed. *************** *** 2670,2675 **** --- 2663,2681 ---- (delete-region (progn (beginning-of-line) (point)) (progn (forward-line n) (point))))) + ;; Show message if message has a lower level than `gnus-verbose'. + ;; Guide-line for numbers: + ;; 1 - error messages, 3 - non-serious error messages, 5 - messages + ;; for things that take a long time, 7 - not very important messages + ;; on stuff, 9 - messages inside loops. + (defun gnus-message (level &rest args) + (if (<= level gnus-verbose) + (apply 'message args) + ;; We have to do this format thingie here even if the result isn't + ;; shown - the return value has to be the same as the return value + ;; from `message'. + (apply 'format args))) + ;;; List and range functions (defun gnus-last-element (list) *************** *** 2965,2972 **** (define-key gnus-group-mode-map "\C-c\C-i" 'gnus-info-find-node) (define-key gnus-group-mode-map "\M-e" 'gnus-group-edit-group-method) (define-key gnus-group-mode-map "^" 'gnus-group-enter-server-mode) ! (define-key gnus-group-mode-map ! (if gnus-xemacs [button2] [mouse-2]) 'gnus-mouse-pick-group) (define-key gnus-group-mode-map "<" 'beginning-of-buffer) (define-key gnus-group-mode-map ">" 'end-of-buffer) (define-key gnus-group-mode-map "\C-c\C-b" 'gnus-bug) --- 2971,2977 ---- (define-key gnus-group-mode-map "\C-c\C-i" 'gnus-info-find-node) (define-key gnus-group-mode-map "\M-e" 'gnus-group-edit-group-method) (define-key gnus-group-mode-map "^" 'gnus-group-enter-server-mode) ! (define-key gnus-group-mode-map gnus-mouse-2 'gnus-mouse-pick-group) (define-key gnus-group-mode-map "<" 'beginning-of-buffer) (define-key gnus-group-mode-map ">" 'end-of-buffer) (define-key gnus-group-mode-map "\C-c\C-b" 'gnus-bug) *************** *** 2989,2994 **** --- 2994,3000 ---- (define-key gnus-group-group-map "E" 'gnus-group-edit-group) (define-key gnus-group-group-map "e" 'gnus-group-edit-group-method) (define-key gnus-group-group-map "p" 'gnus-group-edit-group-parameters) + (define-key gnus-group-group-map "v" 'gnus-group-add-to-virtual) (define-prefix-command 'gnus-group-list-map) (define-key gnus-group-mode-map "A" 'gnus-group-list-map) *************** *** 3149,3155 **** (group (gnus-group-group-name))) (funcall gnus-group-prepare-function level unread nil) (if (zerop (buffer-size)) ! (message gnus-no-groups-message) (goto-char (point-min)) (if (not group) ;; Go to the first group with unread articles. --- 3155,3161 ---- (group (gnus-group-group-name))) (funcall gnus-group-prepare-function level unread nil) (if (zerop (buffer-size)) ! (gnus-message 5 gnus-no-groups-message) (goto-char (point-min)) (if (not group) ;; Go to the first group with unread articles. *************** *** 3319,3325 **** (car info) (prin1-to-string (car gnus-select-method)) (nth 1 gnus-select-method))) ! (message "Note: New group created") (setq entry (gnus-gethash (gnus-group-prefixed-name (gnus-group-real-name (car info)) --- 3325,3331 ---- (car info) (prin1-to-string (car gnus-select-method)) (nth 1 gnus-select-method))) ! (gnus-message 6 "Note: New group created") (setq entry (gnus-gethash (gnus-group-prefixed-name (gnus-group-real-name (car info)) *************** *** 3514,3544 **** (low 10) (beg (point)) pos found) ! (or first-too (forward-line way)) ! (while (and ! (not (eobp)) ! (not (setq ! found ! (and (or all ! (and ! (let ((unread ! (get-text-property (point) 'gnus-unread))) ! (or (eq unread t) (and unread (> unread 0)))) ! (let ((lev (get-text-property ! (point) 'gnus-level))) ! (and lev (<= (get-text-property ! (point) 'gnus-level) ! gnus-level-subscribed))))) ! (or (not level) ! (let ((lev (get-text-property (point) 'gnus-level))) ! (if (and lev (<= lev level)) ! t ! (if (< lev low) ! (progn ! (setq low lev) ! (setq pos (point)))) ! nil)))))) ! (zerop (forward-line way)))) (if found (progn (gnus-group-position-cursor) t) (if pos (goto-char pos) (goto-char beg)) --- 3520,3552 ---- (low 10) (beg (point)) pos found) ! (if (and backward (progn (beginning-of-line)) (bobp)) ! nil ! (or first-too (forward-line way)) ! (while (and ! (not (eobp)) ! (not (setq ! found ! (and (or all ! (and ! (let ((unread ! (get-text-property (point) 'gnus-unread))) ! (or (eq unread t) (and unread (> unread 0)))) ! (let ((lev (get-text-property ! (point) 'gnus-level))) ! (and lev (<= (get-text-property ! (point) 'gnus-level) ! gnus-level-subscribed))))) ! (or (not level) ! (let ((lev (get-text-property (point) 'gnus-level))) ! (if (and lev (<= lev level)) ! t ! (if (< lev low) ! (progn ! (setq low lev) ! (setq pos (point)))) ! nil)))))) ! (zerop (forward-line way))))) (if found (progn (gnus-group-position-cursor) t) (if pos (goto-char pos) (goto-char beg)) *************** *** 3553,3569 **** (interactive "p") (let ((buffer-read-only nil) group) ! (while (and (> n 0) (setq group (gnus-group-group-name))) ! (beginning-of-line) ! (forward-char 1) ! (delete-char 1) ! (if unmark ! (progn ! (insert " ") ! (setq gnus-group-marked (delete group gnus-group-marked))) ! (insert "#") ! (setq gnus-group-marked (cons group gnus-group-marked))) ! (forward-line 1) (setq n (1- n))) (gnus-summary-position-cursor) n)) --- 3561,3581 ---- (interactive "p") (let ((buffer-read-only nil) group) ! (while ! (and (> n 0) ! (setq group (gnus-group-group-name)) ! (progn ! (beginning-of-line) ! (forward-char 1) ! (delete-char 1) ! (if unmark ! (progn ! (insert " ") ! (setq gnus-group-marked (delete group gnus-group-marked))) ! (insert "#") ! (setq gnus-group-marked (cons group gnus-group-marked))) ! t) ! (zerop (gnus-group-next-group 1))) (setq n (1- n))) (gnus-summary-position-cursor) n)) *************** *** 3701,3708 **** (gnus-group-search-forward backward (or (not gnus-group-goto-unread) all) level)) (setq n (1- n))) ! (if (/= 0 n) (message "No more%s newsgroups%s" (if all "" " unread") ! (if level " on this level or higher" ""))) n)) (defun gnus-group-prev-group (n) --- 3713,3720 ---- (gnus-group-search-forward backward (or (not gnus-group-goto-unread) all) level)) (setq n (1- n))) ! (if (/= 0 n) (gnus-message 7 "No more%s newsgroups%s" (if all "" " unread") ! (if level " on this level or higher" ""))) n)) (defun gnus-group-prev-group (n) *************** *** 3960,3965 **** --- 3972,3995 ---- "nnkiboze:" group "." gnus-score-file-suffix))) (gnus-group-position-cursor)) + (defun gnus-group-add-to-virtual (n vgroup) + "Add the current group to a virtual group." + (interactive + (list current-prefix-arg + (completing-read "Add to virtual group: " gnus-newsrc-hashtb nil t))) + (or (eq (car (gnus-find-method-for-group vgroup)) 'nnvirtual) + (error "%s is not an nnvirtual group" vgroup)) + (let* ((groups (gnus-group-process-prefix n)) + (method (nth 4 (nth 2 (gnus-gethash vgroup gnus-newsrc-hashtb))))) + (setcar (cdr method) + (concat + (nth 1 method) "\\|" + (mapconcat + (lambda (s) + (gnus-group-remove-mark s) + (concat "\\(^" (regexp-quote s) "$\\)")) + groups "\\|"))))) + ;; Group sorting commands ;; Suggested by Joe Hildebrand . *************** *** 4029,4035 **** (marked (nth 3 (nth 2 entry))) ticked) (if (not (numberp (car entry))) ! (message "Can't catch up; non-active group") ;; Do the updating only if the newsgroup isn't killed (if entry (progn --- 4059,4065 ---- (marked (nth 3 (nth 2 entry))) ticked) (if (not (numberp (car entry))) ! (gnus-message 1 "Can't catch up; non-active group") ;; Do the updating only if the newsgroup isn't killed (if entry (progn *************** *** 4064,4074 **** (defun gnus-group-expire-all-groups () "Expire all expirable articles in all newsgroups." (interactive) ! (message "Expiring...") (let ((gnus-group-marked (mapcar (lambda (info) (car info)) (cdr gnus-newsrc-alist)))) (gnus-group-expire-articles nil)) ! (message "Expiring...done")) (defun gnus-group-set-current-level (n level) "Set the level of the next N groups to LEVEL." --- 4094,4104 ---- (defun gnus-group-expire-all-groups () "Expire all expirable articles in all newsgroups." (interactive) ! (gnus-message 5 "Expiring...") (let ((gnus-group-marked (mapcar (lambda (info) (car info)) (cdr gnus-newsrc-alist)))) (gnus-group-expire-articles nil)) ! (gnus-message 5 "Expiring...done")) (defun gnus-group-set-current-level (n level) "Set the level of the next N groups to LEVEL." *************** *** 4081,4088 **** (setq group (car groups) groups (cdr groups)) (gnus-group-remove-mark group) ! (message "Changed level of %s from %d to %d" ! group (gnus-group-group-level) level) (gnus-group-change-level group level (gnus-group-group-level)) (gnus-group-update-group-line))) --- 4111,4118 ---- (setq group (car groups) groups (cdr groups)) (gnus-group-remove-mark group) ! (gnus-message 6 "Changed level of %s from %d to %d" ! group (gnus-group-group-level) level) (gnus-group-change-level group level (gnus-group-group-level)) (gnus-group-update-group-line))) *************** *** 4239,4245 **** "List all killed newsgroups in the group buffer." (interactive) (if (not gnus-killed-list) ! (message "No killed groups") (funcall gnus-group-prepare-function gnus-level-killed t gnus-level-killed) (goto-char (point-min))) (gnus-group-position-cursor)) --- 4269,4275 ---- "List all killed newsgroups in the group buffer." (interactive) (if (not gnus-killed-list) ! (gnus-message 6 "No killed groups") (funcall gnus-group-prepare-function gnus-level-killed t gnus-level-killed) (goto-char (point-min))) (gnus-group-position-cursor)) *************** *** 4248,4254 **** "List all zombie newsgroups in the group buffer." (interactive) (if (not gnus-zombie-list) ! (message "No zombie groups") (funcall gnus-group-prepare-function gnus-level-zombie t gnus-level-zombie) (goto-char (point-min))) (gnus-group-position-cursor)) --- 4278,4284 ---- "List all zombie newsgroups in the group buffer." (interactive) (if (not gnus-zombie-list) ! (gnus-message 6 "No zombie groups") (funcall gnus-group-prepare-function gnus-level-zombie t gnus-level-zombie) (goto-char (point-min))) (gnus-group-position-cursor)) *************** *** 4321,4327 **** (and force (setq gnus-description-hashtb nil)) (let ((group (or group (gnus-group-group-name))) desc) ! (or group (message "No group name given")) (and (or gnus-description-hashtb (setq desc (gnus-group-get-description group)) (gnus-read-descriptions-file)) --- 4351,4357 ---- (and force (setq gnus-description-hashtb nil)) (let ((group (or group (gnus-group-group-name))) desc) ! (or group (error "No group name given")) (and (or gnus-description-hashtb (setq desc (gnus-group-get-description group)) (gnus-read-descriptions-file)) *************** *** 4375,4381 **** (setq groups (cons (symbol-name group) groups)))) gnus-description-hashtb)) (if (not groups) ! (message "No groups matched \"%s\"." regexp) ;; Print out all the groups. (save-excursion (pop-to-buffer "*Gnus Help*") --- 4405,4411 ---- (setq groups (cons (symbol-name group) groups)))) gnus-description-hashtb)) (if (not groups) ! (gnus-message 3 "No groups matched \"%s\"." regexp) ;; Print out all the groups. (save-excursion (pop-to-buffer "*Gnus Help*") *************** *** 4392,4398 **** gnus-description-hashtb))) (insert " " des "\n")))) (setq groups (cdr groups))) ! (goto-char 1))) (pop-to-buffer obuf))) (defun gnus-group-description-apropos (regexp) --- 4422,4428 ---- gnus-description-hashtb))) (insert " " des "\n")))) (setq groups (cdr groups))) ! (goto-char (point-min)))) (pop-to-buffer obuf))) (defun gnus-group-description-apropos (regexp) *************** *** 4459,4465 **** (interactive "P") (setq gnus-current-kill-article article) (gnus-kill-file-edit-file group) ! (message (substitute-command-keys "Editing a global kill file (Type \\[gnus-kill-file-exit] to exit)"))) --- 4489,4495 ---- (interactive "P") (setq gnus-current-kill-article article) (gnus-kill-file-edit-file group) ! (gnus-message 6 (substitute-command-keys "Editing a global kill file (Type \\[gnus-kill-file-exit] to exit)"))) *************** *** 4546,4552 **** (defun gnus-group-describe-briefly () "Give a one line description of the group mode commands." (interactive) ! (message (substitute-command-keys "\\\\[gnus-group-read-group]:Select \\[gnus-group-next-unread-group]:Forward \\[gnus-group-prev-unread-group]:Backward \\[gnus-group-exit]:Exit \\[gnus-info-find-node]:Run Info \\[gnus-group-describe-briefly]:This help"))) (defun gnus-group-browse-foreign-server (method) --- 4576,4582 ---- (defun gnus-group-describe-briefly () "Give a one line description of the group mode commands." (interactive) ! (gnus-message 6 (substitute-command-keys "\\\\[gnus-group-read-group]:Select \\[gnus-group-next-unread-group]:Forward \\[gnus-group-prev-unread-group]:Backward \\[gnus-group-exit]:Exit \\[gnus-info-find-node]:Run Info \\[gnus-group-describe-briefly]:This help"))) (defun gnus-group-browse-foreign-server (method) *************** *** 4616,4622 **** (setq gnus-browse-return-buffer return-buffer) (let ((gnus-select-method method) groups group) ! (message "Connecting to %s..." (nth 1 method)) (or (gnus-server-opened method) (gnus-open-server method) (error "Unable to contact server: %s" (gnus-status-message method))) --- 4646,4652 ---- (setq gnus-browse-return-buffer return-buffer) (let ((gnus-select-method method) groups group) ! (gnus-message 5 "Connecting to %s..." (nth 1 method)) (or (gnus-server-opened method) (gnus-open-server method) (error "Unable to contact server: %s" (gnus-status-message method))) *************** *** 4636,4642 **** (save-excursion (set-buffer nntp-server-buffer) (let ((cur (current-buffer))) ! (goto-char 1) (delete-matching-lines gnus-ignored-newsgroups) (while (re-search-forward "\\(^[^ \t]+\\)[ \t]+[0-9]+[ \t]+[0-9]+" nil t) --- 4666,4672 ---- (save-excursion (set-buffer nntp-server-buffer) (let ((cur (current-buffer))) ! (goto-char (point-min)) (delete-matching-lines gnus-ignored-newsgroups) (while (re-search-forward "\\(^[^ \t]+\\)[ \t]+[0-9]+[ \t]+[0-9]+" nil t) *************** *** 4655,4661 **** (format "K%7d: %s\n" (cdr group) (car group))) (setq groups (cdr groups)))) (switch-to-buffer (current-buffer)) ! (goto-char 1) (gnus-group-position-cursor))) (defun gnus-browse-mode () --- 4685,4691 ---- (format "K%7d: %s\n" (cdr group) (car group))) (setq groups (cdr groups)))) (switch-to-buffer (current-buffer)) ! (goto-char (point-min)) (gnus-group-position-cursor))) (defun gnus-browse-mode () *************** *** 4707,4713 **** (zerop (gnus-browse-next-group ward))) (setq arg (1- arg))) (gnus-group-position-cursor) ! (if (/= 0 arg) (message "No more newsgroups")) arg)) (defun gnus-browse-unsubscribe-group () --- 4737,4743 ---- (zerop (gnus-browse-next-group ward))) (setq arg (1- arg))) (gnus-group-position-cursor) ! (if (/= 0 arg) (gnus-message 7 "No more newsgroups")) arg)) (defun gnus-browse-unsubscribe-group () *************** *** 4749,4755 **** (defun gnus-browse-describe-briefly () "Give a one line description of the group mode commands." (interactive) ! (message (substitute-command-keys "\\\\[gnus-group-next-group]:Forward \\[gnus-group-prev-group]:Backward \\[gnus-browse-exit]:Exit \\[gnus-info-find-node]:Run Info \\[gnus-browse-describe-briefly]:This help"))) --- 4779,4785 ---- (defun gnus-browse-describe-briefly () "Give a one line description of the group mode commands." (interactive) ! (gnus-message 6 (substitute-command-keys "\\\\[gnus-group-next-group]:Forward \\[gnus-group-prev-group]:Backward \\[gnus-browse-exit]:Exit \\[gnus-info-find-node]:Run Info \\[gnus-browse-describe-briefly]:This help"))) *************** *** 4856,4863 **** (define-key gnus-summary-mode-map "q" 'gnus-summary-exit) (define-key gnus-summary-mode-map "Q" 'gnus-summary-exit-no-update) (define-key gnus-summary-mode-map "\C-c\C-i" 'gnus-info-find-node) ! (define-key gnus-summary-mode-map ! (if gnus-xemacs [button2] [mouse-2]) 'gnus-mouse-pick-article) (define-key gnus-summary-mode-map "m" 'gnus-summary-mail-other-window) (define-key gnus-summary-mode-map "a" 'gnus-summary-post-news) (define-key gnus-summary-mode-map "x" 'gnus-summary-remove-lines-marked-as-read) --- 4886,4892 ---- (define-key gnus-summary-mode-map "q" 'gnus-summary-exit) (define-key gnus-summary-mode-map "Q" 'gnus-summary-exit-no-update) (define-key gnus-summary-mode-map "\C-c\C-i" 'gnus-info-find-node) ! (define-key gnus-summary-mode-map gnus-mouse-2 'gnus-mouse-pick-article) (define-key gnus-summary-mode-map "m" 'gnus-summary-mail-other-window) (define-key gnus-summary-mode-map "a" 'gnus-summary-post-news) (define-key gnus-summary-mode-map "x" 'gnus-summary-remove-lines-marked-as-read) *************** *** 4953,4958 **** --- 4982,4989 ---- (define-key gnus-summary-exit-map "n" 'gnus-summary-catchup-and-goto-next-group) (define-key gnus-summary-exit-map "R" 'gnus-summary-reselect-current-group) (define-key gnus-summary-exit-map "G" 'gnus-summary-rescan-group) + (define-key gnus-summary-exit-map "N" 'gnus-summary-next-group) + (define-key gnus-summary-exit-map "P" 'gnus-summary-prev-group) (define-prefix-command 'gnus-summary-article-map) *************** *** 5024,5029 **** --- 5055,5061 ---- (define-key gnus-summary-save-map "r" 'gnus-summary-save-article-rmail) (define-key gnus-summary-save-map "f" 'gnus-summary-save-article-file) (define-key gnus-summary-save-map "h" 'gnus-summary-save-article-folder) + (define-key gnus-summary-save-map "v" 'gnus-summary-save-article-vm) (define-key gnus-summary-save-map "p" 'gnus-summary-pipe-output) (define-key gnus-summary-mode-map "X" 'gnus-uu-extract-map) *************** *** 5113,5120 **** (let ((locals gnus-summary-local-variables)) (while locals (if (consp (car locals)) ! (set (car (car locals)) nil) ! (set (car locals) nil)) (setq locals (cdr locals))))) (defun gnus-mouse-pick-article (e) --- 5145,5154 ---- (let ((locals gnus-summary-local-variables)) (while locals (if (consp (car locals)) ! (and (vectorp (car (car locals))) ! (set (car (car locals)) nil)) ! (and (vectorp (car locals)) ! (set (car locals) nil))) (setq locals (cdr locals))))) (defun gnus-mouse-pick-article (e) *************** *** 5201,5206 **** --- 5235,5241 ---- (closing-bracket (if dummy ?\> ?\])) (buffer-read-only nil) (b (progn (beginning-of-line) (point)))) + (or (numberp lines) (setq lines 0)) (insert (eval sformat)) (add-text-properties b (1+ b) (list 'gnus (list number (or unread gnus-unread-mark) level))))) *************** *** 5252,5258 **** "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." ! (message "Retrieving newsgroup: %s..." group) (let* ((new-group (gnus-summary-setup-buffer group)) (did-select (and new-group (gnus-select-newsgroup group show-all))) (method (car (gnus-find-method-for-group group)))) --- 5287,5293 ---- "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." ! (gnus-message 5 "Retrieving newsgroup: %s..." group) (let* ((new-group (gnus-summary-setup-buffer group)) (did-select (and new-group (gnus-select-newsgroup group show-all))) (method (car (gnus-find-method-for-group group)))) *************** *** 5290,5296 **** ;; You can change the subjects in this hook. (run-hooks 'gnus-select-group-hook) ;; Do score processing. ! (gnus-possibly-score-headers) ;; Update the format specifiers. (gnus-update-format-specifications) ;; Generate the summary buffer. --- 5325,5331 ---- ;; You can change the subjects in this hook. (run-hooks 'gnus-select-group-hook) ;; Do score processing. ! (and gnus-use-scoring (gnus-possibly-score-headers)) ;; Update the format specifiers. (gnus-update-format-specifications) ;; Generate the summary buffer. *************** *** 5306,5312 **** (progn ;; This newsgroup is empty. (gnus-summary-catchup-and-exit nil t) ;Without confirmations. ! (message "No unread news") (gnus-kill-buffer kill-buffer)) (save-excursion (if kill-buffer --- 5341,5347 ---- (progn ;; This newsgroup is empty. (gnus-summary-catchup-and-exit nil t) ;Without confirmations. ! (gnus-message 6 "No unread news") (gnus-kill-buffer kill-buffer)) (save-excursion (if kill-buffer *************** *** 5847,5853 **** (cond ((null articles) ! (message "Couldn't select newsgroup") 'quit) ((eq articles 0) nil) (t --- 5882,5888 ---- (cond ((null articles) ! (gnus-message 3 "Couldn't select newsgroup") 'quit) ((eq articles 0) nil) (t *************** *** 6284,6290 **** headers char article id dep end) (save-excursion (set-buffer nntp-server-buffer) ! (goto-char 1) ;; Search to the beginning of the next header. Error messages ;; do not begin with 2 or 3. (while (re-search-forward "^[23][0-9]+ " nil t) --- 6319,6325 ---- headers char article id dep end) (save-excursion (set-buffer nntp-server-buffer) ! (goto-char (point-min)) ;; Search to the beginning of the next header. Error messages ;; do not begin with 2 or 3. (while (re-search-forward "^[23][0-9]+ " nil t) *************** *** 6477,6485 **** (gnus-nov-field)) ; refs (gnus-nov-read-integer) ; chars (gnus-nov-read-integer) ; lines ! (if (/= (following-char) ?\t) nil - (forward-char 1) (gnus-nov-field)) ; misc )) (quit (progn --- 6512,6519 ---- (gnus-nov-field)) ; refs (gnus-nov-read-integer) ; chars (gnus-nov-read-integer) ; lines ! (if (= (following-char) ?\n) nil (gnus-nov-field)) ; misc )) (quit (progn *************** *** 6517,6523 **** "Fill in the Xref value in `gnus-current-headers', if necessary. This is meant to be called in `gnus-article-internal-prepare-hook'." (or (not gnus-use-cross-reference) ! (header-xref gnus-current-headers) (let ((case-fold-search t) xref) (save-restriction --- 6551,6558 ---- "Fill in the Xref value in `gnus-current-headers', if necessary. This is meant to be called in `gnus-article-internal-prepare-hook'." (or (not gnus-use-cross-reference) ! (and (header-xref gnus-current-headers) ! (not (string= (header-xref gnus-current-headers) ""))) (let ((case-fold-search t) xref) (save-restriction *************** *** 6747,6755 **** ((< height 6) 1) (t 2)))) (and (= w-end (point-max)) ! ;; adjust for blank lines at the bottom of the window ! (setq top (+ (count-lines (window-start) (point)) ! (- height (count-lines (window-start) w-end) 2)))) (recenter top)))) (defun gnus-summary-recenter () --- 6782,6790 ---- ((< height 6) 1) (t 2)))) (and (= w-end (point-max)) ! ;; adjust for blank lines at the bottom of the window ! (setq top (+ (count-lines (window-start) (point)) ! (- height (count-lines (window-start) w-end) 2)))) (recenter top)))) (defun gnus-summary-recenter () *************** *** 6758,6777 **** displayed, no centering will be performed." ;; Suggested by earle@mahendo.JPL.NASA.GOV (Greg Earle). ;; Recenter only when requested. Suggested by popovich@park.cs.columbia.edu. ! (let ((top (cond ((< (window-height) 4) 0) ! ((< (window-height) 6) 1) ! (t 2)))) (and ;; The user has to want it, gnus-auto-center-summary ;; the article buffer must be displayed, (get-buffer-window gnus-article-buffer) ! ;; there must be lines left to scroll forward, ! (zerop (save-excursion (forward-line (- (window-height) 1 top)))) ! ;; so we recenter. ! (set-window-start ! (get-buffer-window (current-buffer)) ! (save-excursion (forward-line (- top)) (point)))))) ;; Function written by Stainless Steel Rat . (defun gnus-short-group-name (newsgroup) --- 6793,6816 ---- displayed, no centering will be performed." ;; Suggested by earle@mahendo.JPL.NASA.GOV (Greg Earle). ;; Recenter only when requested. Suggested by popovich@park.cs.columbia.edu. ! (let* ((top (cond ((< (window-height) 4) 0) ! ((< (window-height) 6) 1) ! (t 2))) ! (height (1- (window-height))) ! (bottom (save-excursion (goto-char (point-max)) ! (forward-line (- height)) ! (point))) ! (window (get-buffer-window (current-buffer)))) (and ;; The user has to want it, gnus-auto-center-summary ;; the article buffer must be displayed, (get-buffer-window gnus-article-buffer) ! ;; Set the window start to either `bottom', which is the biggest ! ;; possible valid number, or the second line from the top, ! ;; whichever is the least. ! (set-window-start ! window (min bottom (save-excursion (forward-line (- top)) (point))))))) ;; Function written by Stainless Steel Rat . (defun gnus-short-group-name (newsgroup) *************** *** 6937,6943 **** (gnus-mark-xrefs-as-read group headers gnus-newsgroup-unreads gnus-newsgroup-expirable)) ;; Do adaptive scoring, and possibly save score files. ! (and gnus-use-adaptive-scoring (gnus-score-adaptive)) (and (fboundp 'gnus-score-save) (funcall 'gnus-score-save)) --- 6976,6982 ---- (gnus-mark-xrefs-as-read group headers gnus-newsgroup-unreads gnus-newsgroup-expirable)) ;; Do adaptive scoring, and possibly save score files. ! (and gnus-newsgroup-adaptive (gnus-score-adaptive)) (and (fboundp 'gnus-score-save) (funcall 'gnus-score-save)) *************** *** 6965,6972 **** (gnus-group-jump-to-group group) (gnus-group-next-unread-group 1)) (if temporary - ;; If exiting temporary, caller should adjust group mode - ;; buffer point by itself. nil ;Nothing to do. ;; We set all buffer-local variables to nil. It is unclear why ;; this is needed, but if we don't, buffer-local variables are --- 7004,7009 ---- *************** *** 7039,7045 **** (defun gnus-summary-describe-briefly () "Describe summary mode commands briefly." (interactive) ! (message (substitute-command-keys "\\\\[gnus-summary-next-page]:Select \\[gnus-summary-next-unread-article]:Forward \\[gnus-summary-prev-unread-article]:Backward \\[gnus-summary-exit]:Exit \\[gnus-info-find-node]:Run Info \\[gnus-summary-describe-briefly]:This help"))) ;; Walking around group mode buffer from summary mode. --- 7076,7082 ---- (defun gnus-summary-describe-briefly () "Describe summary mode commands briefly." (interactive) ! (gnus-message 6 (substitute-command-keys "\\\\[gnus-summary-next-page]:Select \\[gnus-summary-next-unread-article]:Forward \\[gnus-summary-prev-unread-article]:Backward \\[gnus-summary-exit]:Exit \\[gnus-info-find-node]:Run Info \\[gnus-summary-describe-briefly]:This help"))) ;; Walking around group mode buffer from summary mode. *************** *** 7068,7074 **** (buf gnus-summary-buffer)) (if (null group) (gnus-summary-exit-no-update t) ! (message "Selecting %s..." group) ;; We are now in group mode buffer. ;; Make sure group mode buffer point is on GROUP. (gnus-group-jump-to-group group) --- 7105,7111 ---- (buf gnus-summary-buffer)) (if (null group) (gnus-summary-exit-no-update t) ! (gnus-message 5 "Selecting %s..." group) ;; We are now in group mode buffer. ;; Make sure group mode buffer point is on GROUP. (gnus-group-jump-to-group group) *************** *** 7089,7095 **** (gnus-summary-read-group (gnus-group-group-name) nil no-article buf))))))) - (defun gnus-summary-prev-group (no-article) "Exit current newsgroup and then select previous unread newsgroup. If prefix argument NO-ARTICLE is non-nil, no article is selected initially." --- 7126,7131 ---- *************** *** 7115,7121 **** t ;; If there is no unread articles, stay where you are. (goto-char begin) ! (message "No more unread articles") nil) (gnus-summary-position-cursor))))) --- 7151,7157 ---- t ;; If there is no unread articles, stay where you are. (goto-char begin) ! (gnus-message 3 "No more unread articles") nil) (gnus-summary-position-cursor))))) *************** *** 7131,7137 **** (while (and (> n 0) (gnus-summary-search-forward unread nil backward)) (setq n (1- n))) ! (if (/= 0 n) (message "No more%s articles" (if unread " unread" ""))) (or dont-display (progn (gnus-summary-recenter) --- 7167,7174 ---- (while (and (> n 0) (gnus-summary-search-forward unread nil backward)) (setq n (1- n))) ! (if (/= 0 n) (gnus-message 7 "No more%s articles" ! (if unread " unread" ""))) (or dont-display (progn (gnus-summary-recenter) *************** *** 7206,7211 **** --- 7243,7261 ---- (gnus-summary-goto-subject article) ;; Successfully display article. (gnus-summary-update-line) + (let ((bookmark (cdr (assq article gnus-newsgroup-bookmarks)))) + (set-window-start + (get-buffer-window gnus-article-buffer) + (save-excursion + (set-buffer gnus-article-buffer) + (goto-char (point-min)) + (cond (bookmark + (gnus-message 6 "Moved to bookmark") + (search-forward "\n\n" nil t) + (forward-line bookmark) + (point)) + (t + (point-min)))))) t)) (defun gnus-summary-select-article (&optional all-headers force pseudo article) *************** *** 7218,7238 **** (error "This is a pseudo-article.")) (let ((article (or article (gnus-summary-article-number))) (all-headers (not (not all-headers)))) ;Must be T or NIL. ! (save-excursion ! (set-buffer gnus-summary-buffer) ! (if (or (null gnus-current-article) ! (null gnus-article-current) ! (not (eq article (cdr gnus-article-current))) ! (not (equal (car gnus-article-current) gnus-newsgroup-name)) ! force) ! ;; The requested article is different from the current article. ! (progn ! (gnus-summary-display-article article all-headers) (gnus-configure-windows 'article) ! article) ! (if all-headers (gnus-article-show-all-headers)) ! (gnus-configure-windows 'article) ! nil)))) (defun gnus-summary-set-current-mark (&optional current-mark) "Obsolete function." --- 7268,7302 ---- (error "This is a pseudo-article.")) (let ((article (or article (gnus-summary-article-number))) (all-headers (not (not all-headers)))) ;Must be T or NIL. ! (prog1 ! (save-excursion ! (set-buffer gnus-summary-buffer) ! (if (or (null gnus-current-article) ! (null gnus-article-current) ! (not (eq article (cdr gnus-article-current))) ! (not (equal (car gnus-article-current) gnus-newsgroup-name)) ! force) ! ;; The requested article is different from the current article. ! (progn ! (gnus-summary-display-article article all-headers) ! (gnus-configure-windows 'article) ! article) ! (if all-headers (gnus-article-show-all-headers)) (gnus-configure-windows 'article) ! nil)) ! (let ((bookmark (cdr (assq article gnus-newsgroup-bookmarks)))) ! (set-window-start ! (get-buffer-window gnus-article-buffer) ! (save-excursion ! (set-buffer gnus-article-buffer) ! (goto-char (point-min)) ! (cond (bookmark ! (gnus-message 6 "Moved to bookmark") ! (search-forward "\n\n" nil t) ! (forward-line bookmark) ! (point)) ! (t ! (point-min))))))))) (defun gnus-summary-set-current-mark (&optional current-mark) "Obsolete function." *************** *** 7256,7262 **** ((and subject gnus-auto-select-same (gnus-summary-first-unread-article)) ! (message "Wrapped")) ;; Try to get next/previous article not displayed in this group. ((and gnus-auto-extend-newsgroup (not unread) (not subject) --- 7320,7326 ---- ((and subject gnus-auto-select-same (gnus-summary-first-unread-article)) ! (gnus-message 6 "Wrapped")) ;; Try to get next/previous article not displayed in this group. ((and gnus-auto-extend-newsgroup (not unread) (not subject) *************** *** 7281,7302 **** ;; Select next unread newsgroup automagically. (cond ((not gnus-auto-select-next) ! (message "No more%s articles" (if unread " unread" ""))) ((eq gnus-auto-select-next 'quietly) ;; Select quietly. (if (eq method 'nndigest) (gnus-summary-exit) ! (message "No more%s articles (%s)..." ! (if unread " unread" "") ! (if group (concat "selecting " group) ! "exiting")) (gnus-summary-next-group nil group backward))) (t (let ((keystrokes '(?\C-n ?\C-p)) key) (while (or (null key) (memq key keystrokes)) ! (message ! "No more%s articles%s" (if unread " unread" "") (if (and group (not (eq method 'nndigest))) (format " (Type %s for %s [%s])" (single-key-description cmd) group --- 7345,7366 ---- ;; Select next unread newsgroup automagically. (cond ((not gnus-auto-select-next) ! (gnus-message 7 "No more%s articles" (if unread " unread" ""))) ((eq gnus-auto-select-next 'quietly) ;; Select quietly. (if (eq method 'nndigest) (gnus-summary-exit) ! (gnus-message 7 "No more%s articles (%s)..." ! (if unread " unread" "") ! (if group (concat "selecting " group) ! "exiting")) (gnus-summary-next-group nil group backward))) (t (let ((keystrokes '(?\C-n ?\C-p)) key) (while (or (null key) (memq key keystrokes)) ! (gnus-message ! 7 "No more%s articles%s" (if unread " unread" "") (if (and group (not (eq method 'nndigest))) (format " (Type %s for %s [%s])" (single-key-description cmd) group *************** *** 7364,7370 **** (cond (circular (gnus-summary-beginning-of-article)) (lines ! (message "End of message")) ((null lines) (gnus-summary-next-unread-article)))) (and gnus-summary-buffer --- 7428,7434 ---- (cond (circular (gnus-summary-beginning-of-article)) (lines ! (gnus-message 3 "End of message")) ((null lines) (gnus-summary-next-unread-article)))) (and gnus-summary-buffer *************** *** 7398,7404 **** gnus-article-buffer (cond ((> lines 0) (if (gnus-article-next-page lines) ! (message "End of message"))) ((< lines 0) (gnus-article-prev-page (- lines)))))) (gnus-summary-position-cursor)) --- 7462,7468 ---- gnus-article-buffer (cond ((> lines 0) (if (gnus-article-next-page lines) ! (gnus-message 3 "End of message"))) ((< lines 0) (gnus-article-prev-page (- lines)))))) (gnus-summary-position-cursor)) *************** *** 7507,7513 **** (gnus-summary-refer-article (substring ref (match-beginning 0) (match-end 0)))))) (setq n (1- n))) ! (or (zerop n) (message "No references in article or expired article.")) (gnus-summary-position-cursor) n) --- 7571,7578 ---- (gnus-summary-refer-article (substring ref (match-beginning 0) (match-end 0)))))) (setq n (1- n))) ! (or (zerop n) ! (gnus-message 1 "No references in article or expired article.")) (gnus-summary-position-cursor) n) *************** *** 7549,7555 **** (gnus-rebuild-thread message-id) (gnus-summary-goto-subject number) message-id) ! (message "No such references") nil)))))) (defun gnus-summary-enter-digest-group () --- 7614,7620 ---- (gnus-rebuild-thread message-id) (gnus-summary-goto-subject number) message-id) ! (gnus-message 1 "No such references") nil)))))) (defun gnus-summary-enter-digest-group () *************** *** 7578,7584 **** (switch-to-buffer buf) (gnus-set-global-variables) (gnus-configure-windows 'summary) ! (message "Article not a digest?")))) (defun gnus-summary-isearch-article () "Do incremental search forward on current article." --- 7643,7649 ---- (switch-to-buffer buf) (gnus-set-global-variables) (gnus-configure-windows 'summary) ! (gnus-message 3 "Article not a digest?")))) (defun gnus-summary-isearch-article () "Do incremental search forward on current article." *************** *** 7639,7645 **** ;; We don't want to read article again from NNTP server nor reset ;; current point. (gnus-summary-select-article) ! (message "Searching article: %d..." gnus-current-article) (setq last gnus-current-article) (gnus-eval-in-buffer-window gnus-article-buffer (save-restriction --- 7704,7710 ---- ;; We don't want to read article again from NNTP server nor reset ;; current point. (gnus-summary-select-article) ! (gnus-message 9 "Searching article: %d..." gnus-current-article) (setq last gnus-current-article) (gnus-eval-in-buffer-window gnus-article-buffer (save-restriction *************** *** 7650,7656 **** (while (and (not found) (gnus-summary-display-article (gnus-summary-search-subject backward nil nil))) ! (message "Searching article: %d..." gnus-current-article) (gnus-eval-in-buffer-window gnus-article-buffer (save-restriction (widen) --- 7715,7721 ---- (while (and (not found) (gnus-summary-display-article (gnus-summary-search-subject backward nil nil))) ! (gnus-message 9 "Searching article: %d..." gnus-current-article) (gnus-eval-in-buffer-window gnus-article-buffer (save-restriction (widen) *************** *** 7683,7695 **** ;; We don't want to change current point nor window configuration. (save-excursion (save-window-excursion ! (message "Executing %s..." (key-description command)) ;; We'd like to execute COMMAND interactively so as to give arguments. (gnus-execute header regexp (` (lambda () (call-interactively '(, (key-binding command))))) backward) ! (message "Executing %s... done" (key-description command))))) (defun gnus-summary-beginning-of-article () "Scroll the article back to the beginning." --- 7748,7760 ---- ;; We don't want to change current point nor window configuration. (save-excursion (save-window-excursion ! (gnus-message 6 "Executing %s..." (key-description command)) ;; We'd like to execute COMMAND interactively so as to give arguments. (gnus-execute header regexp (` (lambda () (call-interactively '(, (key-binding command))))) backward) ! (gnus-message 6 "Executing %s... done" (key-description command))))) (defun gnus-summary-beginning-of-article () "Scroll the article back to the beginning." *************** *** 7714,7720 **** (defun gnus-summary-show-article () "Force re-fetching of the current article." (interactive) ! (gnus-summary-select-article gnus-have-all-headers t t)) (defun gnus-summary-toggle-header (arg) "Show the headers if they are hidden, or hide them if they are shown. --- 7779,7785 ---- (defun gnus-summary-show-article () "Force re-fetching of the current article." (interactive) ! (gnus-summary-select-article gnus-have-all-headers t)) (defun gnus-summary-toggle-header (arg) "Show the headers if they are hidden, or hide them if they are shown. *************** *** 7726,7738 **** (set-buffer gnus-article-buffer) (let ((buffer-read-only nil)) (if (numberp arg) ! (if (> arg 0) (remove-text-properties 1 (point-max) '(invisible t)) (if (< arg 0) (run-hooks 'gnus-article-display-hook))) ! (if (text-property-any 1 (point-max) 'invisible t) ! (remove-text-properties 1 (point-max) '(invisible t)) (let ((gnus-have-all-headers nil)) (run-hooks 'gnus-article-display-hook)))) ! (set-window-point (get-buffer-window (current-buffer)) 1)))) (defun gnus-summary-show-all-headers () "Make all header lines visible." --- 7791,7805 ---- (set-buffer gnus-article-buffer) (let ((buffer-read-only nil)) (if (numberp arg) ! (if (> arg 0) (remove-text-properties (point-min) (point-max) ! gnus-hidden-properties) (if (< arg 0) (run-hooks 'gnus-article-display-hook))) ! (if (text-property-any (point-min) (point-max) 'invisible t) ! (remove-text-properties (point-min) (point-max) ! gnus-hidden-properties) (let ((gnus-have-all-headers nil)) (run-hooks 'gnus-article-display-hook)))) ! (set-window-point (get-buffer-window (current-buffer)) (point-min))))) (defun gnus-summary-show-all-headers () "Make all header lines visible." *************** *** 7817,7823 **** (or (gnus-check-backend-function 'request-accept-article (or select-method to-newsgroup)) (error "%s does not support article moving" to-newsgroup)) ! (message "Moving to %s: %s..." (or select-method to-newsgroup) articles) (while articles (if (setq art-group (gnus-request-move-article --- 7884,7891 ---- (or (gnus-check-backend-function 'request-accept-article (or select-method to-newsgroup)) (error "%s does not support article moving" to-newsgroup)) ! (gnus-message 6 "Moving to %s: %s..." ! (or select-method to-newsgroup) articles) (while articles (if (setq art-group (gnus-request-move-article *************** *** 7869,7875 **** (setq gnus-newsgroup-unreads (delq article gnus-newsgroup-unreads)) (setq gnus-newsgroup-dormant (delq article gnus-newsgroup-dormant))) ! (message "Couldn't move article %s" (car articles))) (gnus-summary-remove-process-mark (car articles)) (setq articles (cdr articles))))) --- 7937,7943 ---- (setq gnus-newsgroup-unreads (delq article gnus-newsgroup-unreads)) (setq gnus-newsgroup-dormant (delq article gnus-newsgroup-dormant))) ! (gnus-message 1 "Couldn't move article %s" (car articles))) (gnus-summary-remove-process-mark (car articles)) (setq articles (cdr articles))))) *************** *** 7946,7952 **** (or (gnus-check-backend-function 'request-accept-article (or select-method to-newsgroup)) (error "%s does not support article copying" to-newsgroup)) ! (message "Copying to %s: %s..." (or select-method to-newsgroup) articles) (while articles (if (setq art-group (save-excursion --- 8014,8021 ---- (or (gnus-check-backend-function 'request-accept-article (or select-method to-newsgroup)) (error "%s does not support article copying" to-newsgroup)) ! (gnus-message 6 "Copying to %s: %s..." ! (or select-method to-newsgroup) articles) (while articles (if (setq art-group (save-excursion *************** *** 7985,7991 **** (gnus-add-marked-articles (car info) (car (car marks)) (list to-article) info)) (setq marks (cdr marks))))) ! (message "Couldn't copy article %s" (car articles))) (gnus-summary-remove-process-mark (car articles)) (setq articles (cdr articles))) (kill-buffer copy-buf))) --- 8054,8060 ---- (gnus-add-marked-articles (car info) (car (car marks)) (list to-article) info)) (setq marks (cdr marks))))) ! (gnus-message 1 "Couldn't copy article %s" (car articles))) (gnus-summary-remove-process-mark (car articles)) (setq articles (cdr articles))) (kill-buffer copy-buf))) *************** *** 8051,8062 **** (error "The current newsgroup does not support article editing.")) (gnus-summary-select-article t) (other-window 1) ! (message "C-c C-c to end edits") (setq buffer-read-only nil) (text-mode) (use-local-map (copy-keymap (current-local-map))) (local-set-key "\C-c\C-c" 'gnus-summary-edit-article-done) ! (goto-char 1) (search-forward "\n\n" nil t)) (defun gnus-summary-edit-article-done () --- 8120,8131 ---- (error "The current newsgroup does not support article editing.")) (gnus-summary-select-article t) (other-window 1) ! (gnus-message 6 "C-c C-c to end edits") (setq buffer-read-only nil) (text-mode) (use-local-map (copy-keymap (current-local-map))) (local-set-key "\C-c\C-c" 'gnus-summary-edit-article-done) ! (goto-char (point-min)) (search-forward "\n\n" nil t)) (defun gnus-summary-edit-article-done () *************** *** 8125,8130 **** --- 8194,8203 ---- (gnus-summary-raise-score score)) (gnus-summary-next-subject 1 t))) + (defun gnus-score-default (level) + (if level (prefix-numeric-value level) + gnus-score-interactive-default-score)) + (defun gnus-summary-raise-thread (score) "Raise articles under current thread with SCORE." (interactive "P") *************** *** 8173,8180 **** ;; select the first unread article. (gnus-summary-next-article t (and gnus-auto-select-same (gnus-summary-subject-string))) ! (message "%d articles are marked as %s" ! count (if unmark "unread" "read")))) (defun gnus-summary-kill-same-subject (unmark) "Mark articles which has the same subject as read. --- 8246,8253 ---- ;; select the first unread article. (gnus-summary-next-article t (and gnus-auto-select-same (gnus-summary-subject-string))) ! (gnus-message 7 "%d articles are marked as %s" ! count (if unmark "unread" "read")))) (defun gnus-summary-kill-same-subject (unmark) "Mark articles which has the same subject as read. *************** *** 8190,8197 **** (if (null unmark) ;; Go to next unread subject. (gnus-summary-next-subject 1 t)) ! (message "%d articles are marked as %s" ! count (if unmark "unread" "read")))) (defun gnus-summary-mark-same-subject (subject &optional unmark) "Mark articles with same SUBJECT as read, and return marked number. --- 8263,8270 ---- (if (null unmark) ;; Go to next unread subject. (gnus-summary-next-subject 1 t)) ! (gnus-message 7 "%d articles are marked as %s" ! count (if unmark "unread" "read")))) (defun gnus-summary-mark-same-subject (subject &optional unmark) "Mark articles with same SUBJECT as read, and return marked number. *************** *** 8236,8242 **** (gnus-summary-set-process-mark (gnus-summary-article-number))) (zerop (gnus-summary-next-subject (if backward -1 1) nil t))) (setq n (1- n))) ! (if (/= 0 n) (message "No more articles")) (gnus-summary-recenter) (gnus-summary-position-cursor) n)) --- 8309,8315 ---- (gnus-summary-set-process-mark (gnus-summary-article-number))) (zerop (gnus-summary-next-subject (if backward -1 1) nil t))) (setq n (1- n))) ! (if (/= 0 n) (gnus-message 7 "No more articles")) (gnus-summary-recenter) (gnus-summary-position-cursor) n)) *************** *** 8294,8305 **** (count-lines (min (point) (save-excursion ! (goto-char 1) (search-forward "\n\n" nil t) (point))) (point)))) gnus-newsgroup-bookmarks)) ! (message "A bookmark has been added to the current article.")) (defun gnus-summary-remove-bookmark (article) "Remove the bookmark from the current article." --- 8367,8378 ---- (count-lines (min (point) (save-excursion ! (goto-char (point-min)) (search-forward "\n\n" nil t) (point))) (point)))) gnus-newsgroup-bookmarks)) ! (gnus-message 6 "A bookmark has been added to the current article.")) (defun gnus-summary-remove-bookmark (article) "Remove the bookmark from the current article." *************** *** 8310,8317 **** (progn (setq gnus-newsgroup-bookmarks (delq old gnus-newsgroup-bookmarks)) ! (message "Removed bookmark.")) ! (message "No bookmark in current article.")))) ;; Suggested by Daniel Quinlan . (defun gnus-summary-mark-as-dormant (n) --- 8383,8390 ---- (progn (setq gnus-newsgroup-bookmarks (delq old gnus-newsgroup-bookmarks)) ! (gnus-message 6 "Removed bookmark.")) ! (gnus-message 6 "No bookmark in current article.")))) ;; Suggested by Daniel Quinlan . (defun gnus-summary-mark-as-dormant (n) *************** *** 8362,8368 **** (zerop (gnus-summary-next-subject (if backward -1 1) gnus-summary-goto-unread t))) (setq n (1- n))) ! (if (/= 0 n) (message "No more %sarticles" (if mark "" "unread "))) (gnus-summary-recenter) (gnus-summary-position-cursor) (gnus-set-mode-line 'summary) --- 8435,8441 ---- (zerop (gnus-summary-next-subject (if backward -1 1) gnus-summary-goto-unread t))) (setq n (1- n))) ! (if (/= 0 n) (gnus-message 7 "No more %sarticles" (if mark "" "unread "))) (gnus-summary-recenter) (gnus-summary-position-cursor) (gnus-set-mode-line 'summary) *************** *** 8589,8595 **** (let ((buffer-read-only nil) (marks (concat "^[" marks "]"))) (goto-char (point-min)) ! (if gnus-use-adaptive-scoring (gnus-score-remove-lines-adaptive marks) (while (re-search-forward marks (point-max) t) (beginning-of-line) --- 8662,8668 ---- (let ((buffer-read-only nil) (marks (concat "^[" marks "]"))) (goto-char (point-min)) ! (if gnus-newsgroup-adaptive (gnus-score-remove-lines-adaptive marks) (while (re-search-forward marks (point-max) t) (beginning-of-line) *************** *** 8737,8743 **** (if all "Mark absolutely all articles as read? " "Mark all unread articles as read? "))) ! (if (and not-mark (not gnus-use-adaptive-scoring) gnus-newsgroup-auto-expire) (progn (and all (setq gnus-newsgroup-marked nil --- 8810,8816 ---- (if all "Mark absolutely all articles as read? " "Mark all unread articles as read? "))) ! (if (and not-mark (not gnus-newsgroup-adaptive) gnus-newsgroup-auto-expire) (progn (and all (setq gnus-newsgroup-marked nil *************** *** 8888,8894 **** (gnus-summary-go-to-next-thread backward)) (setq n (1- n))) (gnus-summary-position-cursor) ! (if (/= 0 n) (message "No more threads")) n)) (defun gnus-summary-prev-thread (n) --- 8961,8967 ---- (gnus-summary-go-to-next-thread backward)) (setq n (1- n))) (gnus-summary-position-cursor) ! (if (/= 0 n) (gnus-message 7 "No more threads")) n)) (defun gnus-summary-prev-thread (n) *************** *** 8934,8940 **** (gnus-summary-go-down-thread))) (setq n (1- n))) (gnus-summary-position-cursor) ! (if (/= 0 n) (message "Can't go further")) n)) (defun gnus-summary-up-thread (n) --- 9007,9013 ---- (gnus-summary-go-down-thread))) (setq n (1- n))) (gnus-summary-position-cursor) ! (if (/= 0 n) (gnus-message 7 "Can't go further")) n)) (defun gnus-summary-up-thread (n) *************** *** 9046,9052 **** (let ((gnus-thread-sort-functions (list (cdr predicate))) (gnus-summary-prepare-hook nil) (gnus-summary-already-sorted nil)) ! (gnus-summary-prepare)))))) (defun gnus-sortable-date (date) "Make sortable string by string-lessp from DATE. --- 9119,9128 ---- (let ((gnus-thread-sort-functions (list (cdr predicate))) (gnus-summary-prepare-hook nil) (gnus-summary-already-sorted nil)) ! (gnus-summary-prepare) ! (and gnus-show-threads ! gnus-thread-hide-subtree ! (gnus-summary-hide-all-threads))))))) (defun gnus-sortable-date (date) "Make sortable string by string-lessp from DATE. *************** *** 9098,9104 **** (error "No default saver is defined.")))) (if (assq 'name header) (gnus-copy-file (cdr (assq 'name header))) ! (message "Article %d is unsaveable" (car articles))))) (gnus-summary-remove-process-mark (car articles)) (setq articles (cdr articles))) (gnus-summary-position-cursor) --- 9174,9180 ---- (error "No default saver is defined.")))) (if (assq 'name header) (gnus-copy-file (cdr (assq 'name header))) ! (gnus-message 1 "Article %d is unsaveable" (car articles))))) (gnus-summary-remove-process-mark (car articles)) (setq articles (cdr articles))) (gnus-summary-position-cursor) *************** *** 9154,9159 **** --- 9230,9245 ---- (let ((gnus-default-article-saver 'gnus-summary-save-in-folder)) (gnus-summary-save-article arg))) + (defun gnus-summary-save-article-vm (arg) + "Append the current article to a vm folder. + If N is a positive number, save the N next articles. + If N is a negative number, save the N previous articles. + If N is nil and any articles have been marked with the process mark, + save those articles instead." + (interactive "P") + (let ((gnus-default-article-saver 'gnus-summary-save-in-vm)) + (gnus-summary-save-article arg))) + (defun gnus-read-save-file-name (prompt default-name) (let ((methods gnus-split-methods) split-name) *************** *** 9411,9418 **** (define-key gnus-article-mode-map "\C-c\C-m" 'gnus-article-mail) (define-key gnus-article-mode-map "\C-c\C-M" 'gnus-article-mail-with-original) (define-key gnus-article-mode-map "?" 'gnus-article-describe-briefly) ! (define-key gnus-article-mode-map [mouse-2] 'gnus-article-push-button) (define-key gnus-article-mode-map "\r" 'gnus-article-press-button) ;; Duplicate almost all summary keystrokes in the article mode map. (let ((commands --- 9497,9505 ---- (define-key gnus-article-mode-map "\C-c\C-m" 'gnus-article-mail) (define-key gnus-article-mode-map "\C-c\C-M" 'gnus-article-mail-with-original) (define-key gnus-article-mode-map "?" 'gnus-article-describe-briefly) ! (define-key gnus-article-mode-map gnus-mouse-2 'gnus-article-push-button) (define-key gnus-article-mode-map "\r" 'gnus-article-press-button) + (define-key gnus-article-mode-map "\t" 'gnus-article-next-button) ;; Duplicate almost all summary keystrokes in the article mode map. (let ((commands *************** *** 9570,9576 **** (let* ((article (if header (header-number header) article)) (summary-buffer (current-buffer)) (internal-hook gnus-article-internal-prepare-hook) - (bookmark (cdr (assq article gnus-newsgroup-bookmarks))) (group gnus-newsgroup-name) result) (save-excursion --- 9657,9662 ---- *************** *** 9586,9592 **** (setq gnus-current-article 0) (and (numberp article) (gnus-summary-mark-as-read article gnus-canceled-mark)) ! (message "No such article (may be canceled)") (and (numberp article) (setq gnus-current-article article)) (ding)) --- 9672,9678 ---- (setq gnus-current-article 0) (and (numberp article) (gnus-summary-mark-as-read article gnus-canceled-mark)) ! (gnus-message 1 "No such article (may be canceled)") (and (numberp article) (setq gnus-current-article article)) (ding)) *************** *** 9658,9673 **** (and gnus-break-pages (gnus-narrow-to-page)) (gnus-set-mode-line 'article) (gnus-configure-windows 'article) ! (goto-char 1) ! (set-window-start ! (get-buffer-window gnus-article-buffer) ! (cond (bookmark ! (message "Moved to bookmark") ! (search-forward "\n\n" nil t) ! (forward-line bookmark) ! (point)) ! (t ! (point-min)))) t))))))) (defun gnus-article-show-all-headers () --- 9744,9750 ---- (and gnus-break-pages (gnus-narrow-to-page)) (gnus-set-mode-line 'article) (gnus-configure-windows 'article) ! (goto-char (point-min)) t))))))) (defun gnus-article-show-all-headers () *************** *** 9676,9682 **** (gnus-article-setup-buffer) (set-buffer gnus-article-buffer) (let ((buffer-read-only nil)) ! (remove-text-properties 1 (point-max) '(invisible t))))) (defun gnus-article-hide-headers-if-wanted () "Hide unwanted headers if `gnus-have-all-headers' is nil. --- 9753,9760 ---- (gnus-article-setup-buffer) (set-buffer gnus-article-buffer) (let ((buffer-read-only nil)) ! (remove-text-properties (point-min) (point-max) ! gnus-hidden-properties)))) (defun gnus-article-hide-headers-if-wanted () "Hide unwanted headers if `gnus-have-all-headers' is nil. *************** *** 9695,9706 **** want want-list beg want-l) ;; First we narrow to just the headers. (widen) ! (goto-char 1) ;; Hide any "From " lines at the beginning of (mail) articles. (while (looking-at "From ") (forward-line 1)) ! (if (/= (point) 1) ! (add-text-properties 1 (point) '(invisible t))) ;; Then treat the rest of the header lines. (narrow-to-region (point) --- 9773,9784 ---- want want-list beg want-l) ;; First we narrow to just the headers. (widen) ! (goto-char (point-min)) ;; Hide any "From " lines at the beginning of (mail) articles. (while (looking-at "From ") (forward-line 1)) ! (if (bobp) ! (add-text-properties (point-min) (point) gnus-hidden-properties)) ;; Then treat the rest of the header lines. (narrow-to-region (point) *************** *** 9709,9715 **** ;; `gnus-ignored-headers' and `gnus-visible-headers' to ;; select which header lines is to remain visible in the ;; article buffer. ! (goto-char 1) (while (re-search-forward "^[^ \t]*:" nil t) (beginning-of-line) ;; We add the headers we want to keep to a list and delete --- 9787,9793 ---- ;; `gnus-ignored-headers' and `gnus-visible-headers' to ;; select which header lines is to remain visible in the ;; article buffer. ! (goto-char (point-min)) (while (re-search-forward "^[^ \t]*:" nil t) (beginning-of-line) ;; We add the headers we want to keep to a list and delete *************** *** 9732,9738 **** (forward-line 1))) ;; Next we perform the sorting by looking at ;; `gnus-sorted-header-list'. ! (goto-char 1) (while (and sorted want-list) (setq want-l want-list) (while (and want-l --- 9810,9816 ---- (forward-line 1))) ;; Next we perform the sorting by looking at ;; `gnus-sorted-header-list'. ! (goto-char (point-min)) (while (and sorted want-list) (setq want-l want-list) (while (and want-l *************** *** 9752,9773 **** (if delete (delete-region (point) (point-max)) ;; Suggested by Sudish Joseph . ! (add-text-properties (point) (point-max) '(invisible t))))))) ! ! (defun gnus-article-hide-signature () ! "Hides the signature in an article. ! It does this by hiding everyting after \"^-- *$\", which is what all ! signatures should be preceded by. Note that this may mean that parts ! of an article may disappear if the article has such a line in the ! middle of the text." ! (interactive) ! (save-excursion ! (set-buffer gnus-article-buffer) ! (let ((buffer-read-only nil)) ! (goto-char (point-max)) ! (if (re-search-backward "^-- *$" nil t) ! (progn ! (add-text-properties (point) (point-max) '(invisible t))))))) ;; Written by Per Abrahamsen . (defun gnus-article-treat-overstrike () --- 9830,9836 ---- (if delete (delete-region (point) (point-max)) ;; Suggested by Sudish Joseph . ! (add-text-properties (point) (point-max) gnus-hidden-properties)))))) ;; Written by Per Abrahamsen . (defun gnus-article-treat-overstrike () *************** *** 9798,9804 **** (save-excursion (set-buffer gnus-article-buffer) (let ((buffer-read-only nil)) ! (goto-char 1) (search-forward "\n\n" nil t) (end-of-line 1) (let ((paragraph-start "^\\W")) --- 9861,9867 ---- (save-excursion (set-buffer gnus-article-buffer) (let ((buffer-read-only nil)) ! (goto-char (point-min)) (search-forward "\n\n" nil t) (end-of-line 1) (let ((paragraph-start "^\\W")) *************** *** 9870,9876 **** (insert (hexl-hex-string-to-integer (buffer-substring (point) (+ 2 (point))))) (delete-char 2)) ! ((message "Malformed MIME quoted-printable message")))))) (defun gnus-article-date-ut (&optional type) --- 9933,9939 ---- (insert (hexl-hex-string-to-integer (buffer-substring (point) (+ 2 (point))))) (delete-char 2)) ! ((gnus-message 3 "Malformed MIME quoted-printable message")))))) (defun gnus-article-date-ut (&optional type) *************** *** 10155,10161 **** (defun gnus-article-describe-briefly () "Describe article mode commands briefly." (interactive) ! (message (substitute-command-keys "\\\\[gnus-article-next-page]:Next page \\[gnus-article-prev-page]:Prev page \\[gnus-article-show-summary]:Show summary \\[gnus-info-find-node]:Run Info \\[gnus-article-describe-briefly]:This help"))) (defun gnus-article-summary-command () --- 10218,10224 ---- (defun gnus-article-describe-briefly () "Describe article mode commands briefly." (interactive) ! (gnus-message 6 (substitute-command-keys "\\\\[gnus-article-next-page]:Next page \\[gnus-article-prev-page]:Prev page \\[gnus-article-show-summary]:Show summary \\[gnus-info-find-node]:Run Info \\[gnus-article-describe-briefly]:This help"))) (defun gnus-article-summary-command () *************** *** 10198,10204 **** (let ((i 0) (lower "abcdefghijklmnopqrstuvwxyz") upper) ! (message "Building caesar-translate-table...") (setq caesar-translate-table (make-vector 256 0)) (while (< i 256) (aset caesar-translate-table i i) --- 10261,10267 ---- (let ((i 0) (lower "abcdefghijklmnopqrstuvwxyz") upper) ! (gnus-message 9 "Building caesar-translate-table...") (setq caesar-translate-table (make-vector 256 0)) (while (< i 256) (aset caesar-translate-table i i) *************** *** 10222,10228 **** (if (<= v t1) (if (< v t2) v (+ v 47)) (if (<= v t3) (- v 47) v)))) (setq i (1+ i)))) ! (message "Building caesar-translate-table... done"))) (let ((from (region-beginning)) (to (region-end)) (i 0) str len) --- 10285,10291 ---- (if (<= v t1) (if (< v t2) v (+ v 47)) (if (<= v t3) (- v 47) v)))) (setq i (1+ i)))) ! (gnus-message 9 "Building caesar-translate-table... done"))) (let ((from (region-beginning)) (to (region-end)) (i 0) str len) *************** *** 10376,10384 **** (if (gnus-y-or-n-p "Auto-save file exists. Do you want to read it? ") (progn ! (message "Reading %s..." dribble-file) (eval-current-buffer) ! (message "Reading %s...done" dribble-file))))))))) (defun gnus-dribble-delete-file () (if (file-exists-p (gnus-dribble-file-name)) --- 10439,10447 ---- (if (gnus-y-or-n-p "Auto-save file exists. Do you want to read it? ") (progn ! (gnus-message 5 "Reading %s..." dribble-file) (eval-current-buffer) ! (gnus-message 5 "Reading %s...done" dribble-file))))))))) (defun gnus-dribble-delete-file () (if (file-exists-p (gnus-dribble-file-name)) *************** *** 10577,10586 **** (setq where (car (cdr gnus-select-method))) (cond ((eq how 'nnspool) (require 'nnspool) ! (message "Looking up local news spool...")) ((eq how 'nnmh) (require 'nnmh) ! (message "Looking up mh spool...")) (t (require 'nntp))) (setq gnus-current-select-method gnus-select-method) --- 10640,10649 ---- (setq where (car (cdr gnus-select-method))) (cond ((eq how 'nnspool) (require 'nnspool) ! (gnus-message 5 "Looking up local news spool...")) ((eq how 'nnmh) (require 'nnmh) ! (gnus-message 5 "Looking up mh spool...")) (t (require 'nntp))) (setq gnus-current-select-method gnus-select-method) *************** *** 10594,10600 **** "%s server on %s can't be opened. Continue? " (car gnus-select-method) (nth 1 gnus-select-method))) (progn ! (message "Couldn't open server on %s" (nth 1 gnus-select-method)) (ding) nil))))) --- 10657,10664 ---- "%s server on %s can't be opened. Continue? " (car gnus-select-method) (nth 1 gnus-select-method))) (progn ! (gnus-message 1 "Couldn't open server on %s" ! (nth 1 gnus-select-method)) (ding) nil))))) *************** *** 10607,10613 **** ;; Stream is already opened. t ;; Open server. ! (message "Opening server %s on %s..." (car method) (nth 1 method)) (run-hooks 'gnus-open-server-hook) (or (gnus-server-opened method) (gnus-open-server method)) --- 10671,10677 ---- ;; Stream is already opened. t ;; Open server. ! (gnus-message 5 "Opening server %s on %s..." (car method) (nth 1 method)) (run-hooks 'gnus-open-server-hook) (or (gnus-server-opened method) (gnus-open-server method)) *************** *** 10920,10927 **** (gnus-subscribe-hierarchical-interactive new-newsgroups)) ;; Suggested by Per Abrahamsen . (if (> groups 0) ! (message "%d new newsgroup%s arrived." ! groups (if (> groups 1) "s have" " has"))))))) (defun gnus-matches-options-n (group) ;; Returns `subscribe' if the group is to be uncoditionally --- 10984,10991 ---- (gnus-subscribe-hierarchical-interactive new-newsgroups)) ;; Suggested by Per Abrahamsen . (if (> groups 0) ! (gnus-message 6 "%d new newsgroup%s arrived." ! groups (if (> groups 1) "s have" " has"))))))) (defun gnus-matches-options-n (group) ;; Returns `subscribe' if the group is to be uncoditionally *************** *** 10999,11006 **** (gnus-subscribe-hierarchical-interactive new-newsgroups)) ;; Suggested by Per Abrahamsen . (if (> groups 0) ! (message "%d new newsgroup%s arrived." ! groups (if (> groups 1) "s have" " has"))) got-new)) (defun gnus-check-first-time-used () --- 11063,11070 ---- (gnus-subscribe-hierarchical-interactive new-newsgroups)) ;; Suggested by Per Abrahamsen . (if (> groups 0) ! (gnus-message 6 "%d new newsgroup%s arrived." ! groups (if (> groups 1) "s have" " has"))) got-new)) (defun gnus-check-first-time-used () *************** *** 11009,11015 **** (file-exists-p (concat gnus-startup-file ".el")) (file-exists-p (concat gnus-startup-file ".eld"))) nil ! (message "First time user; subscribing you to default groups") (or gnus-have-read-active-file (gnus-read-active-file)) (setq gnus-newsrc-last-checked-date (current-time-string)) (let ((groups gnus-default-subscribed-newsgroups) --- 11073,11079 ---- (file-exists-p (concat gnus-startup-file ".el")) (file-exists-p (concat gnus-startup-file ".eld"))) nil ! (gnus-message 6 "First time user; subscribing you to default groups") (or gnus-have-read-active-file (gnus-read-active-file)) (setq gnus-newsrc-last-checked-date (current-time-string)) (let ((groups gnus-default-subscribed-newsgroups) *************** *** 11037,11043 **** (setq groups (cdr groups))) (gnus-group-make-help-group) (and gnus-novice-user ! (message "`G k' to list killed groups")))))) ;; `gnus-group-change-level' is the fundamental function for changing ;; subscription levels of newsgroups. This might mean just changing --- 11101,11107 ---- (setq groups (cdr groups))) (gnus-group-make-help-group) (and gnus-novice-user ! (gnus-message 7 "`G k' to list killed groups")))))) ;; `gnus-group-change-level' is the fundamental function for changing ;; subscription levels of newsgroups. This might mean just changing *************** *** 11154,11160 **** newsgroup." (let ((newsrc (cdr gnus-newsrc-alist)) bogus group) ! (message "Checking bogus newsgroups...") (or gnus-have-read-active-file (gnus-read-active-file)) ;; Find all bogus newsgroup that are subscribed. (while newsrc --- 11218,11224 ---- newsgroup." (let ((newsrc (cdr gnus-newsrc-alist)) bogus group) ! (gnus-message 5 "Checking bogus newsgroups...") (or gnus-have-read-active-file (gnus-read-active-file)) ;; Find all bogus newsgroup that are subscribed. (while newsrc *************** *** 11190,11203 **** (delete group (symbol-value (car dead-lists))))) (setq killed (cdr killed))) (setq dead-lists (cdr dead-lists)))) ! (message "Checking bogus newsgroups... done"))) (defun gnus-check-duplicate-killed-groups () "Remove duplicates from the list of killed groups." (interactive) (let ((killed gnus-killed-list)) (while killed ! (message "%d" (length killed)) (setcdr killed (delete (car killed) (cdr killed))) (setq killed (cdr killed))))) --- 11254,11267 ---- (delete group (symbol-value (car dead-lists))))) (setq killed (cdr killed))) (setq dead-lists (cdr dead-lists)))) ! (gnus-message 5 "Checking bogus newsgroups... done"))) (defun gnus-check-duplicate-killed-groups () "Remove duplicates from the list of killed groups." (interactive) (let ((killed gnus-killed-list)) (while killed ! (gnus-message 9 "%d" (length killed)) (setcdr killed (delete (car killed) (cdr killed))) (setq killed (cdr killed))))) *************** *** 11208,11214 **** (conditional level) (level (or level (1+ gnus-level-subscribed))) info group active virtuals method) ! (message "Checking new news...") (while newsrc (setq info (car newsrc)) (setq group (car info)) --- 11272,11278 ---- (conditional level) (level (or level (1+ gnus-level-subscribed))) info group active virtuals method) ! (gnus-message 5 "Checking new news...") (while newsrc (setq info (car newsrc)) (setq group (car info)) *************** *** 11254,11260 **** (gnus-get-unread-articles-in-group (car virtuals) active)) (setq virtuals (cdr virtuals))) ! (message "Checking new news... done"))) ;; Create a hash table out of the newsrc alist. The `car's of the ;; alist elements are used as keys. --- 11318,11324 ---- (gnus-get-unread-articles-in-group (car virtuals) active)) (setq virtuals (cdr virtuals))) ! (gnus-message 5 "Checking new news... done"))) ;; Create a hash table out of the newsrc alist. The `car's of the ;; alist elements are used as keys. *************** *** 11387,11393 **** (gnus-request-group group) (save-excursion (set-buffer nntp-server-buffer) ! (goto-char 1) (and (looking-at "[0-9]+ [0-9]+ \\([0-9]+\\) [0-9]+") (progn (goto-char (match-beginning 1)) --- 11451,11457 ---- (gnus-request-group group) (save-excursion (set-buffer nntp-server-buffer) ! (goto-char (point-min)) (and (looking-at "[0-9]+ [0-9]+ \\([0-9]+\\) [0-9]+") (progn (goto-char (match-beginning 1)) *************** *** 11475,11481 **** (if (and where (not (zerop (length where)))) (concat " from " where) "") (car (car methods))))) ! (message mesg) (gnus-check-news-server (car methods)) (cond ((and (eq gnus-read-active-file 'some) --- 11539,11545 ---- (if (and where (not (zerop (length where)))) (concat " from " where) "") (car (car methods))))) ! (gnus-message 5 mesg) (gnus-check-news-server (car methods)) (cond ((and (eq gnus-read-active-file 'some) *************** *** 11492,11499 **** (setq newsrc (cdr newsrc))) (setq list-type (gnus-retrieve-groups groups (car methods))) (cond ((not list-type) ! (message "Cannot read partial active file from %s server." ! (car (car methods))) (ding) (sit-for 2)) ((eq list-type 'active) --- 11556,11564 ---- (setq newsrc (cdr newsrc))) (setq list-type (gnus-retrieve-groups groups (car methods))) (cond ((not list-type) ! (gnus-message ! 1 "Cannot read partial active file from %s server." ! (car (car methods))) (ding) (sit-for 2)) ((eq list-type 'active) *************** *** 11505,11517 **** (t (if (not (gnus-request-list (car methods))) (progn ! (message "Cannot read active file from %s server." ! (car (car methods))) (ding)) (gnus-active-to-gnus-format (and gnus-have-read-active-file (car methods))) (setq gnus-have-read-active-file t) ! (message "%s...done" mesg))))) (setq methods (cdr methods)))))) ;; rewritten by jwz based on ideas from Rick Sladkey --- 11570,11582 ---- (t (if (not (gnus-request-list (car methods))) (progn ! (gnus-message 1 "Cannot read active file from %s server." ! (car (car methods))) (ding)) (gnus-active-to-gnus-format (and gnus-have-read-active-file (car methods))) (setq gnus-have-read-active-file t) ! (gnus-message 5 "%s...done" mesg))))) (setq methods (cdr methods)))))) ;; rewritten by jwz based on ideas from Rick Sladkey *************** *** 11564,11570 **** (cons (symbol-name group) gnus-moderated-list))) (forward-line 1))) (error ! (progn (ding) (message "Possible error in active file.")))) ;; And if we do not care about moderation, we use this loop, ;; which is faster. (condition-case () --- 11629,11635 ---- (cons (symbol-name group) gnus-moderated-list))) (forward-line 1))) (error ! (progn (ding) (gnus-message 3 "Possible error in active file.")))) ;; And if we do not care about moderation, we use this loop, ;; which is faster. (condition-case () *************** *** 11577,11583 **** (set group (cons (read cur) max)) (forward-line 1))) (error ! (progn (ding) (message "Possible error in active file.")))))))) (defun gnus-groups-to-gnus-format (method &optional hashtb) ;; Parse a "groups" active file. --- 11642,11649 ---- (set group (cons (read cur) max)) (forward-line 1))) (error ! (progn (ding) ! (gnus-message 3 "Possible error in active file.")))))))) (defun gnus-groups-to-gnus-format (method &optional hashtb) ;; Parse a "groups" active file. *************** *** 11619,11625 **** (cons min max)))) (forward-line 1)))) (error ! (progn (ding) (message "Possible error in active file.")))))) (defun gnus-read-newsrc-file (&optional force) "Read startup file. --- 11685,11691 ---- (cons min max)))) (forward-line 1)))) (error ! (progn (ding) (gnus-message 3 "Possible error in active file.")))))) (defun gnus-read-newsrc-file (&optional force) "Read startup file. *************** *** 11651,11667 **** ;; ie. reading the .newsrc file will not trash the data ;; already read (except for read articles). (save-excursion ! (message "Reading %s..." newsrc-file) (set-buffer (find-file-noselect newsrc-file)) (buffer-disable-undo (current-buffer)) (gnus-newsrc-to-gnus-format) (kill-buffer (current-buffer)) ! (message "Reading %s... done" newsrc-file)))))) (defun gnus-read-newsrc-el-file (file) (let ((ding-file (concat file "d"))) ;; We always, always read the .eld file. ! (message "Reading %s..." ding-file) (let (gnus-newsrc-assoc) (condition-case nil (load ding-file t t t) --- 11717,11733 ---- ;; ie. reading the .newsrc file will not trash the data ;; already read (except for read articles). (save-excursion ! (gnus-message 5 "Reading %s..." newsrc-file) (set-buffer (find-file-noselect newsrc-file)) (buffer-disable-undo (current-buffer)) (gnus-newsrc-to-gnus-format) (kill-buffer (current-buffer)) ! (gnus-message 5 "Reading %s... done" newsrc-file)))))) (defun gnus-read-newsrc-el-file (file) (let ((ding-file (concat file "d"))) ;; We always, always read the .eld file. ! (gnus-message 5 "Reading %s..." ding-file) (let (gnus-newsrc-assoc) (condition-case nil (load ding-file t t t) *************** *** 11673,11679 **** (if (not (file-newer-than-file-p file ding-file)) () ;; Old format quick file ! (message "Reading %s..." file) ;; The .el file is newer than the .eld file, so we read that one ;; as well. (gnus-read-old-newsrc-el-file file)))) --- 11739,11745 ---- (if (not (file-newer-than-file-p file ding-file)) () ;; Old format quick file ! (gnus-message 5 "Reading %s..." file) ;; The .el file is newer than the .eld file, so we read that one ;; as well. (gnus-read-old-newsrc-el-file file)))) *************** *** 11860,11868 **** (progn ;; The line was buggy. (setq group nil) ! (message "Mangled line: %s" (buffer-substring ! (gnus-point-at-bol) ! (gnus-point-at-eol))) (ding) (sit-for 1))) nil)) --- 11926,11934 ---- (progn ;; The line was buggy. (setq group nil) ! (gnus-message 3 "Mangled line: %s" ! (buffer-substring (gnus-point-at-bol) ! (gnus-point-at-eol))) (ding) (sit-for 1))) nil)) *************** *** 12015,12039 **** (zerop (save-excursion (set-buffer gnus-dribble-buffer) (buffer-size)))) ! (message "(No changes need to be saved)") (if gnus-save-newsrc-file (progn ! (message "Saving %s..." gnus-current-startup-file) ;; Make backup file of master newsrc. (gnus-gnus-to-newsrc-format) ! (message "Saving %s... done" gnus-current-startup-file))) ;; Quickly loadable .newsrc. (set-buffer (get-buffer-create " *Gnus-newsrc*")) (gnus-add-current-to-buffer-list) (buffer-disable-undo (current-buffer)) (erase-buffer) ! (message "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) (kill-buffer (current-buffer)) ! (message "Saving %s.eld... done" gnus-current-startup-file) (gnus-dribble-delete-file)))))) (defun gnus-gnus-to-quick-newsrc-format () --- 12081,12106 ---- (zerop (save-excursion (set-buffer gnus-dribble-buffer) (buffer-size)))) ! (gnus-message 4 "(No changes need to be saved)") (if gnus-save-newsrc-file (progn ! (gnus-message 5 "Saving %s..." gnus-current-startup-file) ;; Make backup file of master newsrc. (gnus-gnus-to-newsrc-format) ! (gnus-message 5 "Saving %s... done" ! gnus-current-startup-file))) ;; Quickly loadable .newsrc. (set-buffer (get-buffer-create " *Gnus-newsrc*")) (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) (kill-buffer (current-buffer)) ! (gnus-message 5 "Saving %s.eld... done" gnus-current-startup-file) (gnus-dribble-delete-file)))))) (defun gnus-gnus-to-quick-newsrc-format () *************** *** 12100,12113 **** (kill-buffer (current-buffer))))) (defun gnus-read-descriptions-file () ! (message "Reading descriptions file...") (cond ((not (or (gnus-server-opened gnus-select-method) (gnus-open-server gnus-select-method))) ! (message "Couldn't open server") nil) ((not (gnus-request-list-newsgroups gnus-select-method)) ! (message "Couldn't read newsgroups descriptions") nil) (t (let (group) --- 12167,12180 ---- (kill-buffer (current-buffer))))) (defun gnus-read-descriptions-file () ! (gnus-message 5 "Reading descriptions file...") (cond ((not (or (gnus-server-opened gnus-select-method) (gnus-open-server gnus-select-method))) ! (gnus-message 1 "Couldn't open server") nil) ((not (gnus-request-list-newsgroups gnus-select-method)) ! (gnus-message 1 "Couldn't read newsgroups descriptions") nil) (t (let (group) *************** *** 12132,12138 **** (and (symbolp group) (set group (buffer-substring (point) (gnus-point-at-eol)))) (forward-line 1)))) ! (message "Reading descriptions file...done") t)))) (defun gnus-group-get-description (group) --- 12199,12205 ---- (and (symbolp group) (set group (buffer-substring (point) (gnus-point-at-eol)))) (forward-line 1)))) ! (gnus-message 5 "Reading descriptions file...done") t)))) (defun gnus-group-get-description (group) *************** *** 12183,12188 **** --- 12250,12256 ---- (suppress-keymap gnus-server-mode-map) (define-key gnus-server-mode-map " " 'gnus-server-read-server) (define-key gnus-server-mode-map "\r" 'gnus-server-read-server) + (define-key gnus-server-mode-map gnus-mouse-2 'gnus-server-pick-server) (define-key gnus-server-mode-map "q" 'gnus-server-exit) (define-key gnus-server-mode-map "l" 'gnus-server-list-servers) (define-key gnus-server-mode-map "k" 'gnus-server-kill-server) *************** *** 12468,12659 **** (interactive (list (gnus-server-server-name))) (gnus-browse-foreign-server (gnus-server-to-method server) (current-buffer))) ! ;;; Gnus score functions. ! ! (defvar gnus-global-score-files nil ! "*List of global score files and directories. ! Set this variable if you want to use people's score files. One entry ! for each score file or each score file directory. Gnus will decide ! by itself what score files are applicable to which group. ! ! Say you want to use the single score file ! \"/ftp.ifi.uio.no@ftp:/pub/larsi/ding/score/soc.motss.SCORE\" and all ! score files in the \"/ftp.some-where:/pub/score\" directory. ! ! (setq gnus-global-score-files ! '(\"/ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE\" ! \"/ftp.some-where:/pub/score\"))") ! ! (defun gnus-score-score-files (group) ! "Return a list of all possible score files." ! (and gnus-global-score-files ! (or gnus-internal-global-score-files ! (gnus-score-search-global-directories gnus-global-score-files))) ! (setq gnus-kill-files-directory ! (file-name-as-directory ! (or gnus-kill-files-directory "~/News/"))) ! (if (not (file-readable-p gnus-kill-files-directory)) ! (setq gnus-score-file-list nil) ! (if (gnus-use-long-file-name 'not-score) ! (if (or (not gnus-score-file-list) ! (gnus-file-newer-than gnus-kill-files-directory ! (car gnus-score-file-list))) ! (setq gnus-score-file-list ! (cons (nth 5 (file-attributes gnus-kill-files-directory)) ! (nreverse ! (directory-files ! gnus-kill-files-directory t ! (concat gnus-score-file-suffix "$")))))) ! (let ((dir (expand-file-name ! (concat gnus-kill-files-directory ! (gnus-replace-chars-in-string group ?. ?/)))) ! (mdir (length (expand-file-name gnus-kill-files-directory))) ! files) ! (if (file-exists-p (concat dir "/" gnus-score-file-suffix)) ! (setq files (list (concat dir "/" gnus-score-file-suffix)))) ! (while (>= (1+ (length dir)) mdir) ! (and (file-exists-p (concat dir "/all/" gnus-score-file-suffix)) ! (setq files (cons (concat dir "/all/" gnus-score-file-suffix) ! files))) ! (string-match "/[^/]*$" dir) ! (setq dir (substring dir 0 (match-beginning 0)))) ! (setq gnus-score-file-list ! (cons nil (nreverse files))))) ! (cdr gnus-score-file-list))) ! ! (defun gnus-score-find-bnews (group) ! "Return a list of score files for GROUP. ! The score files are those files in the ~/News directory which matches ! GROUP using BNews sys file syntax." ! (let* ((sfiles (append (gnus-score-score-files group) ! gnus-internal-global-score-files)) ! (kill-dir (file-name-as-directory ! (expand-file-name gnus-kill-files-directory))) ! (klen (length kill-dir)) ! ofiles not-match regexp) ! (save-excursion ! (set-buffer (get-buffer-create "*gnus score files*")) ! (buffer-disable-undo (current-buffer)) ! ;; Go through all score file names and create regexp with them ! ;; as the source. ! (while sfiles ! (erase-buffer) ! (insert (car sfiles)) ! (goto-char 1) ! ;; First remove the suffix itself. ! (re-search-forward (concat "." gnus-score-file-suffix "$")) ! (replace-match "" t t) ! (goto-char 1) ! (if (looking-at (regexp-quote kill-dir)) ! ;; If the file name was just "SCORE", `klen' is one character ! ;; too much. ! (delete-char (min (1- (point-max)) klen)) ! (goto-char (point-max)) ! (search-backward "/") ! (delete-region (1+ (point)) (point-min))) ! ;; Translate "all" to ".*". ! (while (search-forward "all" nil t) ! (replace-match ".*" t t)) ! (goto-char 1) ! ;; Deal with "not."s. ! (if (looking-at "not.") ! (progn ! (setq not-match t) ! (setq regexp (buffer-substring 5 (point-max)))) ! (setq regexp (buffer-substring 1 (point-max))) ! (setq not-match nil)) ! ;; Finally - if this resulting regexp matches the group name, ! ;; we add this score file to the list of score files ! ;; applicable to this group. ! (if (or (and not-match ! (not (string-match regexp group))) ! (and (not not-match) ! (string-match regexp group))) ! (setq ofiles (cons (car sfiles) ofiles))) ! (setq sfiles (cdr sfiles))) ! (kill-buffer (current-buffer)) ! ;; Slight kludge here - the last score file returned should be ! ;; the local score file, whether it exists or not. This is so ! ;; that any score commands the user enters will go to the right ! ;; file, and not end up in some global score file. ! (let ((localscore ! (expand-file-name ! (if (gnus-use-long-file-name 'not-score) ! (concat gnus-kill-files-directory group "." ! gnus-score-file-suffix) ! (concat gnus-kill-files-directory ! (gnus-replace-chars-in-string group ?. ?/) ! "/" gnus-score-file-suffix))))) ! (and (member localscore ofiles) ! (delete localscore ofiles)) ! (setq ofiles (cons localscore ofiles))) ! (nreverse ofiles)))) ! ! (defun gnus-score-find-single (group) ! "Return list containing the score file for GROUP." ! (list (gnus-score-file-name group))) ! ! (defun gnus-score-find-hierarchical (group) ! "Return list of score files for GROUP. ! This includes the score file for the group and all its parents." ! (let ((all (copy-sequence '(nil))) ! (start 0)) ! (while (string-match "\\." group (1+ start)) ! (setq start (match-beginning 0)) ! (setq all (cons (substring group 0 start) all))) ! (setq all (cons group all)) ! (mapcar 'gnus-score-file-name (nreverse all)))) ! ! (defun gnus-possibly-score-headers () ! (let ((func gnus-score-find-score-files-function) ! score-files scores) ! (and func (not (listp func)) ! (setq func (list func))) ! ;; Go through all the functions for finding score files (or actual ! ;; scores) and add them to a list. ! (while func ! (and (symbolp (car func)) ! (fboundp (car func)) ! (setq score-files ! (nconc score-files (funcall (car func) gnus-newsgroup-name)))) ! (setq func (cdr func))) ! (if score-files (gnus-score-headers score-files)))) ! ! (defun gnus-score-file-name (newsgroup) ! "Return the name of a score file for NEWSGROUP." ! (cond ((or (null newsgroup) ! (string-equal newsgroup "")) ! ;; The global score file is placed at top of the directory. ! (expand-file-name gnus-score-file-suffix ! (or gnus-kill-files-directory "~/News"))) ! ((gnus-use-long-file-name 'not-score) ! ;; Append ".SCORE" to newsgroup name. ! (expand-file-name (concat newsgroup "." gnus-score-file-suffix) ! (or gnus-kill-files-directory "~/News"))) ! (t ! ;; Place "SCORE" under the hierarchical directory. ! (expand-file-name (concat (gnus-newsgroup-directory-form newsgroup) ! "/" gnus-score-file-suffix) ! (or gnus-kill-files-directory "~/News"))))) ! ! (defun gnus-score-search-global-directories (files) ! "Scan all global score directories for score files." ! ;; Set the variable `gnus-internal-global-score-files' to all ! ;; available global score files. ! (interactive (list gnus-global-score-files)) ! (let (out) ! (while files ! (if (string-match "/$" (car files)) ! (setq out (nconc (directory-files ! (car files) t ! (concat gnus-score-file-suffix "$")))) ! (setq out (cons (car files) out))) ! (setq files (cdr files))) ! (setq gnus-internal-global-score-files out))) ! ! (defun gnus-score-default (level) ! (if level (prefix-numeric-value level) ! gnus-score-interactive-default-score)) (provide 'gnus) --- 12536,12545 ---- (interactive (list (gnus-server-server-name))) (gnus-browse-foreign-server (gnus-server-to-method server) (current-buffer))) ! (defun gnus-mouse-pick-server (e) ! (interactive "e") ! (mouse-set-point e) ! (gnus-server-read-server (gnus-server-server-name))) (provide 'gnus) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnbabyl.el dgnus/lisp/nnbabyl.el *** pub/dgnus/lisp/nnbabyl.el Sat May 13 15:24:01 1995 --- dgnus/lisp/nnbabyl.el Sun May 14 23:30:53 1995 *************** *** 461,500 **** (nnmail-save-active nnbabyl-group-alist nnbabyl-active-file))))) (defun nnbabyl-get-new-mail () ! (let (incoming) (nnbabyl-read-mbox) ! (if (and nnmail-spool-file nnbabyl-get-new-mail ! (file-exists-p nnmail-spool-file) ! (> (nth 7 (file-attributes nnmail-spool-file)) 0)) ! (progn ! (and gnus-verbose-backends ! (message "nnbabyl: Reading incoming mail...")) ! (setq incoming ! (nnmail-move-inbox nnmail-spool-file ! (concat nnbabyl-mbox-file "-Incoming"))) ! (save-excursion ! (let ((in-buf (nnmail-split-incoming ! incoming 'nnbabyl-save-mail t))) ! (set-buffer in-buf) ! (goto-char (point-min)) ! (while (search-forward "\n\^_\n" nil t) ! (delete-char -1)) ! (set-buffer nnbabyl-mbox-buffer) ! (goto-char (point-max)) ! (search-backward "\n\^_" nil t) ! (goto-char (match-end 0)) ! (insert-buffer-substring in-buf) ! (kill-buffer in-buf))) ! (run-hooks 'nnmail-read-incoming-hook) ! (and gnus-verbose-backends ! (message "nnbabyl: Reading incoming mail...done")))) ! (and (buffer-modified-p nnbabyl-mbox-buffer) ! (save-excursion ! (nnmail-save-active nnbabyl-group-alist nnbabyl-active-file) ! (set-buffer nnbabyl-mbox-buffer) ! (save-buffer))) ! ;; (if incoming (delete-file incoming)) ! )) (provide 'nnbabyl) --- 461,514 ---- (nnmail-save-active nnbabyl-group-alist nnbabyl-active-file))))) (defun nnbabyl-get-new-mail () ! "Read new incoming mail." ! (let ((spools (if (listp nnmail-spool-file) nnmail-spool-file ! (list nnmail-spool-file))) ! incoming incomings) (nnbabyl-read-mbox) ! (if (or (not nnbabyl-get-new-mail) (not nnmail-spool-file)) ! () ! ;; We go through all the existing spool files and split the ! ;; mail from each. ! (while spools ! (and ! (file-exists-p (car spools)) ! (> (nth 7 (file-attributes (car spools))) 0) ! (progn ! (and gnus-verbose-backends ! (message "nnbabyl: Reading incoming mail...")) ! (setq incoming ! (nnmail-move-inbox ! (car spools) (concat nnbabyl-mbox-file "-Incoming"))) ! (setq incomings (cons incoming incomings)) ! (save-excursion ! (let ((in-buf (nnmail-split-incoming ! incoming 'nnbabyl-save-mail t))) ! (set-buffer in-buf) ! (goto-char (point-min)) ! (while (search-forward "\n\^_\n" nil t) ! (delete-char -1)) ! (set-buffer nnbabyl-mbox-buffer) ! (goto-char (point-max)) ! (search-backward "\n\^_" nil t) ! (goto-char (match-end 0)) ! (insert-buffer-substring in-buf) ! (kill-buffer in-buf))))) ! (setq spools (cdr spools))) ! ;; If we did indeed read any incoming spools, we save all info. ! (and (buffer-modified-p nnbabyl-mbox-buffer) ! (save-excursion ! (nnmail-save-active nnbabyl-group-alist nnbabyl-active-file) ! (set-buffer nnbabyl-mbox-buffer) ! (save-buffer))) ! (while incomings ! ;; The following has been commented away, just to make sure ! ;; that nobody ever loses any mail. If you feel safe that ! ;; nnfolder will never do anything strange, just remove those ! ;; two semicolons, and avoid having lots of "Incoming*" ! ;; files. ! ;; (and (file-writable-p incoming) (delete-file incoming)) ! (setq incomings (cdr incomings)))))) (provide 'nnbabyl) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nndigest.el dgnus/lisp/nndigest.el *** pub/dgnus/lisp/nndigest.el Sat May 13 15:24:01 1995 --- dgnus/lisp/nndigest.el Sun May 14 19:51:26 1995 *************** *** 77,83 **** (setq sequence (cdr sequence))) ;; Fold continuation lines. ! (goto-char 1) (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t) (replace-match " " t t)) 'headers))) --- 77,83 ---- (setq sequence (cdr sequence))) ;; Fold continuation lines. ! (goto-char (point-min)) (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t) (replace-match " " t t)) 'headers))) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nndoc.el dgnus/lisp/nndoc.el *** pub/dgnus/lisp/nndoc.el Sat May 13 15:24:01 1995 --- dgnus/lisp/nndoc.el Sun May 14 19:50:23 1995 *************** *** 84,90 **** (setq sequence (cdr sequence))) ;; Fold continuation lines. ! (goto-char 1) (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t) (replace-match " " t t)) 'headers))) --- 84,90 ---- (setq sequence (cdr sequence))) ;; Fold continuation lines. ! (goto-char (point-min)) (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t) (replace-match " " t t)) 'headers))) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnfolder.el dgnus/lisp/nnfolder.el *** pub/dgnus/lisp/nnfolder.el Sat May 13 15:24:01 1995 --- dgnus/lisp/nnfolder.el Sun May 14 19:50:22 1995 *************** *** 139,145 **** ;; Fold continuation lines. (set-buffer nntp-server-buffer) ! (goto-char 1) (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t) (replace-match " " t t)) 'headers))) --- 139,145 ---- ;; Fold continuation lines. (set-buffer nntp-server-buffer) ! (goto-char (point-min)) (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t) (replace-match " " t t)) 'headers))) *************** *** 285,291 **** (save-excursion (set-buffer nnfolder-current-buffer) (while articles ! (goto-char 1) (if (search-forward (nnfolder-article-string (car articles)) nil t) (if (or force (> (nnmail-days-between --- 285,291 ---- (save-excursion (set-buffer nnfolder-current-buffer) (while articles ! (goto-char (point-min)) (if (search-forward (nnfolder-article-string (car articles)) nil t) (if (or force (> (nnmail-days-between *************** *** 340,346 **** (save-excursion (nnfolder-possibly-change-group group) (set-buffer nnfolder-current-buffer) ! (goto-char 1) (if (search-forward (nnfolder-article-string article) nil t) (nnfolder-delete-mail)) (and last --- 340,346 ---- (save-excursion (nnfolder-possibly-change-group group) (set-buffer nnfolder-current-buffer) ! (goto-char (point-min)) (if (search-forward (nnfolder-article-string article) nil t) (nnfolder-delete-mail)) (and last *************** *** 378,384 **** (nnfolder-possibly-change-group group) (save-excursion (set-buffer nnfolder-current-buffer) ! (goto-char 1) (if (not (search-forward (nnfolder-article-string article) nil t)) nil (nnfolder-delete-mail t t) --- 378,384 ---- (nnfolder-possibly-change-group group) (save-excursion (set-buffer nnfolder-current-buffer) ! (goto-char (point-min)) (if (not (search-forward (nnfolder-article-string article) nil t)) nil (nnfolder-delete-mail t t) *************** *** 599,631 **** (current-buffer)))) (defun nnfolder-get-new-mail () ! (let (incoming) ! (if (and nnmail-spool-file ! nnfolder-get-new-mail ! (file-exists-p nnmail-spool-file) ! (> (nth 7 (file-attributes nnmail-spool-file)) 0)) ! (progn ! (and gnus-verbose-backends ! (message "nnfolder: Reading incoming mail...")) ! (setq incoming ! (nnmail-move-inbox nnmail-spool-file ! (concat nnfolder-directory "Incoming"))) ! (nnmail-split-incoming incoming 'nnfolder-save-mail) ! (run-hooks 'nnmail-read-incoming-hook) ! (nnmail-save-active nnfolder-group-alist nnfolder-active-file) ! (and gnus-verbose-backends ! (message "nnfolder: Reading incoming mail...done")))) ! (let ((bufs nnfolder-buffer-alist)) ! (save-excursion ! (while bufs ! (if (not (buffer-name (nth 1 (car bufs)))) ! (setq nnfolder-buffer-alist ! (delq (car bufs) nnfolder-buffer-alist)) ! (set-buffer (nth 1 (car bufs))) ! (and (buffer-modified-p) (save-buffer))) ! (setq bufs (cdr bufs))))) ! ;; (if incoming (delete-file incoming)) ! )) (provide 'nnfolder) --- 599,652 ---- (current-buffer)))) (defun nnfolder-get-new-mail () ! "Read new incoming mail." ! (let ((spools (if (listp nnmail-spool-file) nnmail-spool-file ! (list nnmail-spool-file))) ! incomings incoming) ! (if (or (not nnfolder-get-new-mail) (not nnmail-spool-file)) ! () ! ;; We first activate all the groups. ! (nnfolder-request-list) ! (setq nnfolder-group-alist (nnmail-get-active)) ! ;; The we go through all the existing spool files and split the ! ;; mail from each. ! (while spools ! (and ! (file-exists-p (car spools)) ! (> (nth 7 (file-attributes (car spools))) 0) ! (progn ! (and gnus-verbose-backends ! (message "nnfolder: Reading incoming mail...")) ! (setq incoming ! (nnmail-move-inbox ! (car spools) (concat nnfolder-directory "Incoming"))) ! (setq incomings (cons incoming incomings)) ! (nnmail-split-incoming incoming 'nnfolder-save-mail))) ! (setq spools (cdr spools))) ! ;; If we did indeed read any incoming spools, we save all info. ! (if incoming ! (progn ! (nnmail-save-active nnfolder-group-alist nnfolder-active-file) ! (run-hooks 'nnmail-read-incoming-hook) ! (and gnus-verbose-backends ! (message "nnfolder: Reading incoming mail...done")))) ! (let ((bufs nnfolder-buffer-alist)) ! (save-excursion ! (while bufs ! (if (not (buffer-name (nth 1 (car bufs)))) ! (setq nnfolder-buffer-alist ! (delq (car bufs) nnfolder-buffer-alist)) ! (set-buffer (nth 1 (car bufs))) ! (and (buffer-modified-p) (save-buffer))) ! (setq bufs (cdr bufs))))) ! (while incomings ! ;; The following has been commented away, just to make sure ! ;; that nobody ever loses any mail. If you feel safe that ! ;; nnfolder will never do anything strange, just remove those ! ;; two semicolons, and avoid having lots of "Incoming*" ! ;; files. ! ;; (and (file-writable-p incoming) (delete-file incoming)) ! (setq incomings (cdr incomings)))))) (provide 'nnfolder) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnkiboze.el dgnus/lisp/nnkiboze.el *** pub/dgnus/lisp/nnkiboze.el Sat May 13 15:24:01 1995 --- dgnus/lisp/nnkiboze.el Sun May 14 19:51:26 1995 *************** *** 31,36 **** --- 31,37 ---- (require 'nntp) (require 'nnheader) (require 'gnus) + (require 'gnus-score) (defvar nnkiboze-directory (expand-file-name (or gnus-article-save-directory "~/News/")) *************** *** 62,68 **** (set-buffer nntp-server-buffer) (erase-buffer) (insert-file-contents nov) ! (goto-char 1) (while (and (not (eobp)) (< first (read (current-buffer)))) (forward-line 1)) (beginning-of-line) --- 63,69 ---- (set-buffer nntp-server-buffer) (erase-buffer) (insert-file-contents nov) ! (goto-char (point-min)) (while (and (not (eobp)) (< first (read (current-buffer)))) (forward-line 1)) (beginning-of-line) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnmail.el dgnus/lisp/nnmail.el *** pub/dgnus/lisp/nnmail.el Sat May 13 15:24:01 1995 --- dgnus/lisp/nnmail.el Sun May 14 19:50:22 1995 *************** *** 333,339 **** ;; Go through all groups from the active list. (save-excursion (set-buffer nntp-server-buffer) ! (goto-char 1) (while (re-search-forward "^\\([^ \t]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+\\)" nil t) (setq group-assoc --- 333,339 ---- ;; Go through all groups from the active list. (save-excursion (set-buffer nntp-server-buffer) ! (goto-char (point-min)) (while (re-search-forward "^\\([^ \t]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+\\)" nil t) (setq group-assoc diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnmbox.el dgnus/lisp/nnmbox.el *** pub/dgnus/lisp/nnmbox.el Sat May 13 15:24:01 1995 --- dgnus/lisp/nnmbox.el Sun May 14 23:30:54 1995 *************** *** 439,473 **** (goto-char end)))))) (defun nnmbox-get-new-mail () ! (let (incoming) (nnmbox-read-mbox) ! (if (and nnmail-spool-file nnmbox-get-new-mail ! (file-exists-p nnmail-spool-file) ! (> (nth 7 (file-attributes nnmail-spool-file)) 0)) ! (progn ! (and gnus-verbose-backends ! (message "nnmbox: Reading incoming mail...")) ! (setq incoming ! (nnmail-move-inbox nnmail-spool-file ! (concat nnmbox-mbox-file "-Incoming"))) ! (save-excursion ! (let ((in-buf (nnmail-split-incoming ! incoming 'nnmbox-save-mail t))) ! (set-buffer nnmbox-mbox-buffer) ! (goto-char (point-max)) ! (insert-buffer-substring in-buf) ! (kill-buffer in-buf))) ! (run-hooks 'nnmail-read-incoming-hook) ! (and gnus-verbose-backends ! (message "nnmbox: Reading incoming mail...done")))) ! (and (buffer-modified-p nnmbox-mbox-buffer) ! (save-excursion ! (nnmail-save-active nnmbox-group-alist nnmbox-active-file) ! (set-buffer nnmbox-mbox-buffer) ! (save-buffer))) ! ; (if incoming ! ; (delete-file incoming)) ! )) (provide 'nnmbox) --- 439,486 ---- (goto-char end)))))) (defun nnmbox-get-new-mail () ! "Read new incoming mail." ! (let ((spools (if (listp nnmail-spool-file) nnmail-spool-file ! (list nnmail-spool-file))) ! incoming incomings) (nnmbox-read-mbox) ! (if (or (not nnmbox-get-new-mail) (not nnmail-spool-file)) ! () ! ;; We go through all the existing spool files and split the ! ;; mail from each. ! (while spools ! (and ! (file-exists-p (car spools)) ! (> (nth 7 (file-attributes (car spools))) 0) ! (progn ! (and gnus-verbose-backends ! (message "nnmbox: Reading incoming mail...")) ! (setq incoming ! (nnmail-move-inbox ! (car spools) (concat nnmbox-mbox-file "-Incoming"))) ! (save-excursion ! (let ((in-buf (nnmail-split-incoming ! incoming 'nnmbox-save-mail t))) ! (set-buffer nnmbox-mbox-buffer) ! (goto-char (point-max)) ! (insert-buffer-substring in-buf) ! (kill-buffer in-buf))))) ! (setq spools (cdr spools))) ! ;; If we did indeed read any incoming spools, we save all info. ! (and (buffer-modified-p nnmbox-mbox-buffer) ! (save-excursion ! (nnmail-save-active nnmbox-group-alist nnmbox-active-file) ! (set-buffer nnmbox-mbox-buffer) ! (save-buffer))) ! (while incomings ! ;; The following has been commented away, just to make sure ! ;; that nobody ever loses any mail. If you feel safe that ! ;; nnfolder will never do anything strange, just remove those ! ;; two semicolons, and avoid having lots of "Incoming*" ! ;; files. ! ;; (and (file-writable-p incoming) (delete-file incoming)) ! (setq incomings (cdr incomings)))))) ! (provide 'nnmbox) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnmh.el dgnus/lisp/nnmh.el *** pub/dgnus/lisp/nnmh.el Sat May 13 15:24:02 1995 --- dgnus/lisp/nnmh.el Sun May 14 16:29:55 1995 *************** *** 378,398 **** (defun nnmh-get-new-mail () "Read new incoming mail." ! (let (incoming) ! (if (and nnmh-get-new-mail nnmail-spool-file ! (file-exists-p nnmail-spool-file) ! (> (nth 7 (file-attributes nnmail-spool-file)) 0)) ! (progn ! (message "nnmh: Reading incoming mail...") ! (setq incoming ! (nnmail-move-inbox nnmail-spool-file ! (concat nnmh-directory "Incoming"))) ! (nnmh-request-list) ! (setq nnmh-group-alist (nnmail-get-active)) ! (nnmail-split-incoming incoming 'nnmh-save-mail) ! (run-hooks 'nnmail-read-incoming-hook) ! ;; (delete-file incoming) ! (message "nnmh: Reading incoming mail...done"))))) (defun nnmh-update-gnus-unreads (group) ;; Go through the .nnmh-articles file and compare with the actual --- 378,418 ---- (defun nnmh-get-new-mail () "Read new incoming mail." ! (let ((spools (if (listp nnmail-spool-file) nnmail-spool-file ! (list nnmail-spool-file))) ! incoming incomings) ! (if (or (not nnmh-get-new-mail) (not nnmail-spool-file)) ! () ! ;; We first activate all the groups. ! (nnmh-request-list) ! (setq nnmh-group-alist (nnmail-get-active)) ! ;; The we go through all the existing spool files and split the ! ;; mail from each. ! (while spools ! (and ! (file-exists-p (car spools)) ! (> (nth 7 (file-attributes (car spools))) 0) ! (progn ! (and gnus-verbose-backends ! (message "nnmh: Reading incoming mail...")) ! (setq incoming ! (nnmail-move-inbox ! (car spools) (concat nnmh-directory "Incoming"))) ! (setq incomings (cons incoming incomings)) ! (nnmail-split-incoming incoming 'nnmh-save-mail))) ! (setq spools (cdr spools))) ! ;; If we did indeed read any incoming spools, we save all info. ! (if incoming ! (message "nnmh: Reading incoming mail...done")) ! (while incomings ! ;; The following has been commented away, just to make sure ! ;; that nobody ever loses any mail. If you feel safe that ! ;; nnfolder will never do anything strange, just remove those ! ;; two semicolons, and avoid having lots of "Incoming*" ! ;; files. ! ;; (and (file-writable-p incoming) (delete-file incoming)) ! (setq incomings (cdr incomings)))))) ! (defun nnmh-update-gnus-unreads (group) ;; Go through the .nnmh-articles file and compare with the actual diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnml.el dgnus/lisp/nnml.el *** pub/dgnus/lisp/nnml.el Sat May 13 15:24:02 1995 --- dgnus/lisp/nnml.el Sun May 14 19:50:20 1995 *************** *** 133,139 **** (message "nnml: Receiving headers... done")) ;; Fold continuation lines. ! (goto-char 1) (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t) (replace-match " " t t)) 'headers)))) --- 133,139 ---- (message "nnml: Receiving headers... done")) ;; Fold continuation lines. ! (goto-char (point-min)) (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t) (replace-match " " t t)) 'headers)))) *************** *** 386,392 **** (set-buffer nntp-server-buffer) (erase-buffer) (insert-file-contents nov) ! (goto-char 1) (while (and (not (eobp)) (< first (read (current-buffer)))) (forward-line 1)) (beginning-of-line) --- 386,392 ---- (set-buffer nntp-server-buffer) (erase-buffer) (insert-file-contents nov) ! (goto-char (point-min)) (while (and (not (eobp)) (< first (read (current-buffer)))) (forward-line 1)) (beginning-of-line) *************** *** 474,480 **** "Read new incoming mail." (let ((spools (if (listp nnmail-spool-file) nnmail-spool-file (list nnmail-spool-file))) ! incoming) (if (or (not nnml-get-new-mail) (not nnmail-spool-file)) () ;; We first activate all the groups. --- 474,480 ---- "Read new incoming mail." (let ((spools (if (listp nnmail-spool-file) nnmail-spool-file (list nnmail-spool-file))) ! incoming incomings) (if (or (not nnml-get-new-mail) (not nnmail-spool-file)) () ;; We first activate all the groups. *************** *** 493,498 **** --- 493,499 ---- (nnmail-move-inbox (car spools) (concat nnml-directory "Incoming"))) (nnmail-split-incoming incoming 'nnml-save-mail) + (setq incomings (cons incoming incomings)) ;; The following has been commented away, just to make sure ;; that nobody ever loses any mail. If you feel safe that ;; nnml will never do anything strange, just remove those *************** *** 508,514 **** (nnml-save-nov) (run-hooks 'nnmail-read-incoming-hook) (and gnus-verbose-backends ! (message "nnml: Reading incoming mail...done"))))))) (defun nnml-add-nov (group article line) --- 509,523 ---- (nnml-save-nov) (run-hooks 'nnmail-read-incoming-hook) (and gnus-verbose-backends ! (message "nnml: Reading incoming mail...done")))) ! (while incomings ! ;; The following has been commented away, just to make sure ! ;; that nobody ever loses any mail. If you feel safe that ! ;; nnfolder will never do anything strange, just remove those ! ;; two semicolons, and avoid having lots of "Incoming*" ! ;; files. ! ;; (and (file-writable-p incoming) (delete-file incoming)) ! (setq incomings (cdr incomings)))))) (defun nnml-add-nov (group article line) *************** *** 653,659 **** (while files (erase-buffer) (insert-file-contents (concat dir "/" (int-to-string (car files)))) ! (goto-char 1) (narrow-to-region 1 (save-excursion (search-forward "\n\n" nil t) (setq chars (- (point-max) (point))) --- 662,668 ---- (while files (erase-buffer) (insert-file-contents (concat dir "/" (int-to-string (car files)))) ! (goto-char (point-min)) (narrow-to-region 1 (save-excursion (search-forward "\n\n" nil t) (setq chars (- (point-max) (point))) *************** *** 677,683 **** (defun nnml-nov-delete-article (group article) (save-excursion (set-buffer (nnml-open-nov group)) ! (goto-char 1) (if (re-search-forward (concat "^" (int-to-string article) "\t") nil t) (delete-region (match-beginning 0) (progn (forward-line 1) (point)))) t)) --- 686,692 ---- (defun nnml-nov-delete-article (group article) (save-excursion (set-buffer (nnml-open-nov group)) ! (goto-char (point-min)) (if (re-search-forward (concat "^" (int-to-string article) "\t") nil t) (delete-region (match-beginning 0) (progn (forward-line 1) (point)))) t)) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnspool.el dgnus/lisp/nnspool.el *** pub/dgnus/lisp/nnspool.el Sat May 13 15:24:02 1995 --- dgnus/lisp/nnspool.el Sun May 14 19:50:20 1995 *************** *** 152,158 **** (and do-message (message "NNSPOOL: Receiving headers... done")) ;; Fold continuation lines. ! (goto-char 1) (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t) (replace-match " " t t)) 'headers))))) --- 152,158 ---- (and do-message (message "NNSPOOL: Receiving headers... done")) ;; Fold continuation lines. ! (goto-char (point-min)) (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t) (replace-match " " t t)) 'headers))))) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nntp.el dgnus/lisp/nntp.el *** pub/dgnus/lisp/nntp.el Sat May 13 15:24:02 1995 --- dgnus/lisp/nntp.el Sun May 14 19:50:19 1995 *************** *** 859,865 **** (nntp-send-command "^\\.\r?$" (car commands) range) (save-excursion (set-buffer nntp-server-buffer) ! (goto-char 1) (if (looking-at "[23]") (setq nntp-server-xover (car commands)))) (setq commands (cdr commands))) --- 859,865 ---- (nntp-send-command "^\\.\r?$" (car commands) range) (save-excursion (set-buffer nntp-server-buffer) ! (goto-char (point-min)) (if (looking-at "[23]") (setq nntp-server-xover (car commands)))) (setq commands (cdr commands))) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/texi/gnus.texi dgnus/texi/gnus.texi *** pub/dgnus/texi/gnus.texi Sat May 13 15:24:08 1995 --- dgnus/texi/gnus.texi Mon May 15 17:23:51 1995 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @comment %**start of header (This is for running Texinfo on a region.) @setfilename gnus ! @settitle Gnus 0.54 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @comment %**start of header (This is for running Texinfo on a region.) @setfilename gnus ! @settitle Gnus 0.70 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 1266,1271 **** --- 1266,1276 ---- Make a kiboze group. You will be prompted for a name, for a regexp to match groups to be "included" in the kiboze group, and a series of strings to match on headers (@code{gnus-group-make-kiboze-group}). + @item G v + @kindex G v (Group) + @findex gnus-group-add-to-virtual + Add the current group to an @code{nnvirtual} group + (@code{gnus-group-add-to-virtual}). Uses the process/prefix convention. @end table The different methods all have their peculiarities, of course. *************** *** 2899,2904 **** --- 2904,2969 ---- @end table + There are three "methods" for handling all mail. The default is + @code{sendmail}. Some people like what @code{mh} does better, and some + people prefer @code{vm}. + + Three variables for customizing what to use when: + + @table @code + + @vindex gnus-mail-reply-method + @item gnus-mail-reply-method + This function is used to compose replys. The three functions avaibale + are: + + @findex gnus-mail-reply-using-vm + @findex gnus-mail-reply-using-mhe + @findex gnus-mail-reply-using-mail + @itemize @bullet + @item + @code{gnus-mail-reply-using-mail} (sendmail) + @item + @code{gnus-mail-reply-using-mhe} (mh) + @item + @code{gnus-mail-reply-using-vm} (vm) + @end itemize + + @vindex gnus-mail-forward-method + @item gnus-mail-forward-method + This function is used to forward messages. The three functions avaibale + are: + + @findex gnus-mail-forward-using-vm + @findex gnus-mail-forward-using-mhe + @findex gnus-mail-forward-using-mail + @itemize @bullet + @item + @code{gnus-mail-forward-using-mail} (sendmail) + @item + @code{gnus-mail-forward-using-mhe} (mh) + @item + @code{gnus-mail-forward-using-vm} (vm) + @end itemize + + @vindex gnus-mail-other-window-method + @item gnus-mail-other-window-method + This function is used to send mails. The three functions avaibale are: + + @findex gnus-mail-other-window-using-vm + @findex gnus-mail-other-window-using-mhe + @findex gnus-mail-other-window-using-mail + @itemize @bullet + @item + @code{gnus-mail-other-window-using-mail} (sendmail) + @item + @code{gnus-mail-other-window-using-mhe} (mh) + @item + @code{gnus-mail-other-window-using-vm} (vm) + @end itemize + + @end table + @node Post @subsection Post *************** *** 3902,3907 **** --- 3967,3982 ---- Exit the group, check for new articles in the group, and select the group (@code{gnus-summary-rescan-group}). If given a prefix, select all articles, both read and unread. + @item Z N + @kindex Z N (Summary) + @findex gnus-summary-next-group + Exit the group and go to the next group + (@code{gnus-summary-next-group}). + @item Z P + @kindex Z P (Summary) + @findex gnus-summary-prev-group + Exit the group and go to the previous group + (@code{gnus-summary-prev-group}). @end table @vindex gnus-exit-group-hook *************** *** 4050,4055 **** --- 4125,4134 ---- @vindex gnus-summary-save-in-folder Save the article to an MH folder using @code{rcvstore} from the MH library. + @item gnus-summary-save-in-vm + @vindex gnus-summary-save-in-vm + Save the article in a VM folder. You have to have the VM mail + reader to use this setting. @end table All of these functions, except for the last one, will save the article *************** *** 4891,4896 **** --- 4970,4979 ---- @cindex score variables @table @code + @item gnus-use-scoring + @vindex gnus-use-scoring + If @code{nil}, Gnus will not check for score files, and will not, in + general, do any score-related work. @item gnus-kill-killed @vindex gnus-kill-killed If this variable is @code{nil}, Gnus will never apply score files to *************** *** 5094,5100 **** This entry controls the adaptive scoring. If it is @code{t}, the default adaptive scoring rules will be used. If it is @code{ignore}, no adaptive scoring will be performed on this group. If it is a list, this ! list will be used as the adaptive scoring rules. @end table @node Score File Editing --- 5177,5191 ---- This entry controls the adaptive scoring. If it is @code{t}, the default adaptive scoring rules will be used. If it is @code{ignore}, no adaptive scoring will be performed on this group. If it is a list, this ! list will be used as the adaptive scoring rules. If it isn't present, ! or is something other than @code{t} or @code{ignore}, the default ! adaptive scoring rules will be used. If you want to use adaptive ! scoring on most groups, you'd set @code{gnus-use-adaptive-scoring} to ! @code{t}, and insert an @code{(adapt ignore)} in the groups where you do ! not want adaptive scoring. If you only want adaptive scoring in a few ! groups, you'd set @code{gnus-use-adaptive-scoring} to @code{nil}, and ! insert @code{(adapt t)} in the score files of the groups where you want ! it. @end table @node Score File Editing *************** *** 5175,5180 **** --- 5266,5275 ---- by using the score files (@pxref{Score File Format}). This will also let you use different rules in different groups. + @vindex gnus-adaptive-file-suffix + The adaptive score entries will be put into a file where the name is the + group name with @code{gnus-adaptive-file-suffix} appended. + @node Scoring Tips @subsection Scoring Tips @cindex scoring tips *************** *** 6031,6036 **** --- 6126,6138 ---- @cindex highlights @table @code + @item gnus-verbose + @vindex gnus-verbose + This variable is an integer between zero and ten. The higher the value, + the more messages will be displayed. If this variable is zero, Gnus + will never flash any messages, if it is seven, most important messages + will be shown, and if it is ten, Gnus won't ever shut up, but will flash + so many messages it will make your head swim. @item gnus-updated-mode-lines @vindex gnus-updated-mode-lines This is a list of buffers that should keep their mode lines updated.