*** pub/pgnus/lisp/base64.el Wed Jan 5 17:09:35 2000 --- pgnus/lisp/base64.el Thu Apr 20 01:31:02 2000 *************** *** 25,30 **** --- 25,32 ---- ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (eval-when-compile (require 'cl)) + ;; For non-MULE (if (not (fboundp 'char-int)) (fset 'char-int 'identity)) *** pub/pgnus/lisp/fill-flowed.el Thu Apr 20 01:31:48 2000 --- pgnus/lisp/fill-flowed.el Thu Apr 20 01:31:03 2000 *************** *** 0 **** --- 1,94 ---- + ;;; fill-flowed.el --- interprete RFC2646 "flowed" text + ;; Copyright (C) 2000 Free Software Foundation, Inc. + + ;; Author: Simon Josefsson + ;; Keywords: mail + + ;; This program 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 of the License, or + ;; (at your option) any later version. + ;; + ;; This program 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 this program; if not, write to the Free Software + ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + ;;; Commentary: + + ;; This implement decoding of RFC2646 formatted text, including the + ;; quoted-depth wins rules. + + ;; Theory of operation: search for lines ending with SPC, save quote + ;; length of line, remove SPC and concatenate line with the following + ;; line if quote length of following line matches current line. + + ;; When no further concatenations are possible, we've found a + ;; paragraph and we let `fill-region' fill the long line into several + ;; lines with the quote prefix as `fill-prefix'. + + ;; Todo: encoding + + ;; History: + + ;; 2000-02-17 posted on ding mailing list + ;; 2000-02-19 use `point-at-{b,e}ol' in XEmacs + ;; 2000-03-11 no compile warnings for point-at-bol stuff + ;; 2000-03-26 commited to gnus cvs + + ;;; Code: + + (eval-and-compile + (fset 'fill-flowed-point-at-bol + (if (fboundp 'point-at-bol) + 'point-at-bol + 'line-beginning-position)) + + (fset 'fill-flowed-point-at-eol + (if (fboundp 'point-at-eol) + 'point-at-eol + 'line-end-position))) + + (defun fill-flowed (&optional buffer) + (save-excursion + (set-buffer (or (current-buffer) buffer)) + (goto-char (point-min)) + (while (re-search-forward " $" nil t) + (when (save-excursion + (beginning-of-line) + (looking-at "^\\(>*\\)\\( ?\\)")) + (let ((quote (match-string 1))) + (if (string= quote "") + (setq quote nil)) + (when (and quote (string= (match-string 2) "")) + (save-excursion + ;; insert SP after quote for pleasant reading of quoted lines + (beginning-of-line) + (when (> (skip-chars-forward ">") 0) + (insert " ")))) + (while (and (save-excursion + (backward-char 3) + (looking-at "[^-][^-] ")) + (save-excursion + (unless (eobp) + (forward-char 1) + (if quote + (looking-at (format "^\\(%s\\)\\([^>]\\)" quote)) + (looking-at "^ ?"))))) + (save-excursion + (replace-match (if (string= (match-string 2) " ") + "" "\\2"))) + (backward-delete-char -1) + (end-of-line)) + (let ((fill-prefix (when quote (concat quote " ")))) + (fill-region (fill-flowed-point-at-bol) + (fill-flowed-point-at-eol) + 'left 'nosqueeze))))))) + + (provide 'fill-flowed) + + ;;; fill-flowed.el ends here *** pub/pgnus/lisp/gnus-agent.el Wed Jan 5 17:09:36 2000 --- pgnus/lisp/gnus-agent.el Thu Apr 20 01:31:04 2000 *************** *** 611,617 **** new)) (gnus-make-directory (file-name-directory file)) (let ((coding-system-for-write gnus-agent-file-coding-system)) ! (gnus-write-active-file file orig)))) (defun gnus-agent-save-groups (method) (gnus-agent-save-active-1 method 'gnus-groups-to-gnus-format)) --- 611,619 ---- new)) (gnus-make-directory (file-name-directory file)) (let ((coding-system-for-write gnus-agent-file-coding-system)) ! ;; The hashtable contains real names of groups, no more prefix ! ;; removing, so set `full' to `t'. ! (gnus-write-active-file file orig t)))) (defun gnus-agent-save-groups (method) (gnus-agent-save-active-1 method 'gnus-groups-to-gnus-format)) *************** *** 619,625 **** (defun gnus-agent-save-group-info (method group active) (when (gnus-agent-method-p method) (let* ((gnus-command-method method) ! (file (gnus-agent-lib-file "active"))) (gnus-make-directory (file-name-directory file)) (with-temp-file file (when (file-exists-p file) --- 621,628 ---- (defun gnus-agent-save-group-info (method group active) (when (gnus-agent-method-p method) (let* ((gnus-command-method method) ! (file (gnus-agent-lib-file "active")) ! oactive) (gnus-make-directory (file-name-directory file)) (with-temp-file file (when (file-exists-p file) *************** *** 627,635 **** (goto-char (point-min)) (when (re-search-forward (concat "^" (regexp-quote group) " ") nil t) (gnus-delete-line)) ! (insert (format "%S %d %d y\n" (intern group) (cdr active) ! (car active))) (goto-char (point-max)) (while (search-backward "\\." nil t) (delete-char 1)))))) --- 630,646 ---- (goto-char (point-min)) (when (re-search-forward (concat "^" (regexp-quote group) " ") nil t) + (save-excursion + (save-restriction + (narrow-to-region (match-beginning 0) + (progn + (forward-line 1) + (point))) + (setq oactive (car (nnmail-parse-active))))) (gnus-delete-line)) ! (insert (format "%S %d %d y\n" (intern group) ! (cdr active) ! (or (car oactive) (car active)))) (goto-char (point-max)) (while (search-backward "\\." nil t) (delete-char 1)))))) *************** *** 865,871 **** (cdr (gnus-active group))))))) ;; Fetch them. (gnus-make-directory (nnheader-translate-file-chars ! (file-name-directory file))) (when articles (gnus-message 7 "Fetching headers for %s..." group) (save-excursion --- 876,882 ---- (cdr (gnus-active group))))))) ;; Fetch them. (gnus-make-directory (nnheader-translate-file-chars ! (file-name-directory file) t)) (when articles (gnus-message 7 "Fetching headers for %s..." group) (save-excursion *** pub/pgnus/lisp/gnus-art.el Wed Jan 5 17:09:36 2000 --- pgnus/lisp/gnus-art.el Thu Apr 20 01:31:05 2000 *************** *** 1439,1444 **** --- 1439,1446 ---- (mm-read-coding-system "Charset to decode: ")) (ctl (mail-content-type-get ctl 'charset)))) + (when cte + (setq cte (mail-header-strip cte))) (if (and ctl (not (string-match "/" (car ctl)))) (setq ctl nil)) (goto-char (point-max))) *************** *** 1478,1488 **** (when (or force (and type (string-match "quoted-printable" (downcase type)))) (article-goto-body) ! (save-restriction ! (narrow-to-region (point) (point-max)) ! (quoted-printable-decode-region (point-min) (point-max)) ! (when charset ! (mm-decode-body charset))))))) (eval-when-compile (require 'rfc1843)) --- 1480,1486 ---- (when (or force (and type (string-match "quoted-printable" (downcase type)))) (article-goto-body) ! (quoted-printable-decode-region (point) (point-max) charset))))) (eval-when-compile (require 'rfc1843)) *************** *** 2474,2480 **** "s" gnus-article-show-summary "\C-c\C-m" gnus-article-mail "?" gnus-article-describe-briefly ! "e" gnus-summary-article-edit "<" beginning-of-buffer ">" end-of-buffer "\C-c\C-i" gnus-info-find-node --- 2472,2478 ---- "s" gnus-article-show-summary "\C-c\C-m" gnus-article-mail "?" gnus-article-describe-briefly ! "e" gnus-summary-edit-article "<" beginning-of-buffer ">" end-of-buffer "\C-c\C-i" gnus-info-find-node *** pub/pgnus/lisp/gnus-cus.el Wed Jan 5 17:09:37 2000 --- pgnus/lisp/gnus-cus.el Thu Apr 20 01:31:06 2000 *************** *** 323,329 **** :tag "Parameters" :format "%t:\n%h%v" :doc "\ ! These special paramerters are recognized by Gnus. Check the [ ] for the parameters you want to apply to this group or to the groups in this topic, then edit the value to suit your taste." ,@types) --- 323,329 ---- :tag "Parameters" :format "%t:\n%h%v" :doc "\ ! These special parameters are recognized by Gnus. Check the [ ] for the parameters you want to apply to this group or to the groups in this topic, then edit the value to suit your taste." ,@types) *** pub/pgnus/lisp/gnus-group.el Wed Jan 5 17:09:38 2000 --- pgnus/lisp/gnus-group.el Thu Apr 20 01:31:07 2000 *************** *** 1570,1576 **** (defun gnus-fetch-group (group) "Start Gnus if necessary and enter GROUP. Returns whether the fetching was successful or not." ! (interactive "sGroup name: ") (unless (get-buffer gnus-group-buffer) (gnus-no-server)) (gnus-group-read-group nil nil group)) --- 1570,1576 ---- (defun gnus-fetch-group (group) "Start Gnus if necessary and enter GROUP. Returns whether the fetching was successful or not." ! (interactive (list (completing-read "Group name: " gnus-active-hashtb))) (unless (get-buffer gnus-group-buffer) (gnus-no-server)) (gnus-group-read-group nil nil group)) *************** *** 2599,2604 **** --- 2599,2606 ---- or nil if no action could be taken." (let* ((entry (gnus-gethash group gnus-newsrc-hashtb)) (num (car entry))) + ;; Remove entries for this group. + (nnmail-purge-split-history (gnus-group-real-name group)) ;; Do the updating only if the newsgroup isn't killed. (if (not (numberp (car entry))) (gnus-message 1 "Can't catch up %s; non-active group" group) *** pub/pgnus/lisp/gnus-srvr.el Wed Jan 5 17:09:41 2000 --- pgnus/lisp/gnus-srvr.el Thu Apr 20 01:31:08 2000 *************** *** 296,301 **** --- 296,313 ---- (push (assoc server gnus-server-alist) gnus-server-killed-servers) (setq gnus-server-alist (delq (car gnus-server-killed-servers) gnus-server-alist)) + (let ((groups (gnus-groups-from-server server))) + (when (and groups + (gnus-yes-or-no-p + (format "Kill all %s groups from this server? " + (length groups)))) + (dolist (group groups) + (setq gnus-newsrc-alist + (delq (assoc group gnus-newsrc-alist) + gnus-newsrc-alist)) + (when gnus-group-change-level-function + (funcall gnus-group-change-level-function + group gnus-level-killed 3))))) (gnus-server-position-point)) (defun gnus-server-yank-server () *** pub/pgnus/lisp/gnus-start.el Wed Jan 5 17:09:41 2000 --- pgnus/lisp/gnus-start.el Thu Apr 20 01:31:09 2000 *************** *** 1899,1905 **** (gnus-group-prefixed-name "" method)))) ;; Let the Gnus agent save the active file. ! (if (and gnus-agent real-active gnus-plugged (gnus-agent-method-p method)) (progn (gnus-agent-save-groups method) (gnus-active-to-gnus-format method hashtb nil real-active)) --- 1899,1908 ---- (gnus-group-prefixed-name "" method)))) ;; Let the Gnus agent save the active file. ! (if (and gnus-agent ! real-active ! gnus-plugged ! (gnus-agent-method-p method)) (progn (gnus-agent-save-groups method) (gnus-active-to-gnus-format method hashtb nil real-active)) *** pub/pgnus/lisp/gnus-sum.el Wed Jan 5 17:09:42 2000 --- pgnus/lisp/gnus-sum.el Thu Apr 20 01:31:10 2000 *************** *** 696,702 **** :type 'hook) (defcustom gnus-exit-group-hook nil ! "*A hook called when exiting (not quitting) summary mode." :group 'gnus-various :type 'hook) --- 696,703 ---- :type 'hook) (defcustom gnus-exit-group-hook nil ! "*A hook called when exiting summary mode. ! This hook is not called from the non-updating exit commands like `Q'." :group 'gnus-various :type 'hook) *************** *** 5537,5543 **** (rename-buffer (concat (substring name 0 (match-beginning 0)) "Dead " (substring name (match-beginning 0))) ! t)))) (defun gnus-kill-or-deaden-summary (buffer) "Kill or deaden the summary BUFFER." --- 5538,5545 ---- (rename-buffer (concat (substring name 0 (match-beginning 0)) "Dead " (substring name (match-beginning 0))) ! t) ! (bury-buffer)))) (defun gnus-kill-or-deaden-summary (buffer) "Kill or deaden the summary BUFFER." *************** *** 5796,5832 **** (set-buffer gnus-summary-buffer)) (let ((article (or article (gnus-summary-article-number))) (all-headers (not (not all-headers))) ;Must be T or NIL. ! gnus-summary-display-article-function ! did) (and (not pseudo) (gnus-summary-article-pseudo-p article) (error "This is a pseudo-article")) ! (prog1 ! (save-excursion ! (set-buffer gnus-summary-buffer) ! (if (or (and gnus-single-article-buffer ! (or (null gnus-current-article) ! (null gnus-article-current) ! (null (get-buffer gnus-article-buffer)) ! (not (eq article (cdr gnus-article-current))) ! (not (equal (car gnus-article-current) ! gnus-newsgroup-name)))) ! (and (not gnus-single-article-buffer) ! (or (null gnus-current-article) ! (not (eq gnus-current-article article)))) ! force) ! ;; The requested article is different from the current article. ! (prog1 ! (gnus-summary-display-article article all-headers) ! (setq did article) ! (when (or all-headers gnus-show-all-headers) ! (gnus-article-show-all-headers))) (when (or all-headers gnus-show-all-headers) (gnus-article-show-all-headers)) ! 'old)) ! (when did ! (gnus-article-set-window-start ! (cdr (assq article gnus-newsgroup-bookmarks))))))) (defun gnus-summary-set-current-mark (&optional current-mark) "Obsolete function." --- 5798,5831 ---- (set-buffer gnus-summary-buffer)) (let ((article (or article (gnus-summary-article-number))) (all-headers (not (not all-headers))) ;Must be T or NIL. ! gnus-summary-display-article-function) (and (not pseudo) (gnus-summary-article-pseudo-p article) (error "This is a pseudo-article")) ! (save-excursion ! (set-buffer gnus-summary-buffer) ! (if (or (and gnus-single-article-buffer ! (or (null gnus-current-article) ! (null gnus-article-current) ! (null (get-buffer gnus-article-buffer)) ! (not (eq article (cdr gnus-article-current))) ! (not (equal (car gnus-article-current) ! gnus-newsgroup-name)))) ! (and (not gnus-single-article-buffer) ! (or (null gnus-current-article) ! (not (eq gnus-current-article article)))) ! force) ! ;; The requested article is different from the current article. ! (progn ! (gnus-summary-display-article article all-headers) (when (or all-headers gnus-show-all-headers) (gnus-article-show-all-headers)) ! (gnus-article-set-window-start ! (cdr (assq article gnus-newsgroup-bookmarks))) ! article) ! (when (or all-headers gnus-show-all-headers) ! (gnus-article-show-all-headers)) ! 'old)))) (defun gnus-summary-set-current-mark (&optional current-mark) "Obsolete function." *************** *** 6986,6991 **** --- 6985,6991 ---- (gnus-save-hidden-threads (gnus-summary-select-article) (set-buffer gnus-article-buffer) + (goto-char (window-point (get-buffer-window (current-buffer)))) (when backward (forward-line -1)) (while (not found) *************** *** 7236,7243 **** (if hidden (let ((gnus-treat-hide-headers nil) (gnus-treat-hide-boring-headers nil)) (gnus-treat-article 'head)) ! (gnus-treat-article 'head))))))) (defun gnus-summary-show-all-headers () "Make all header lines visible." --- 7236,7246 ---- (if hidden (let ((gnus-treat-hide-headers nil) (gnus-treat-hide-boring-headers nil)) + (setq gnus-article-wash-types + (delq 'headers gnus-article-wash-types)) (gnus-treat-article 'head)) ! (gnus-treat-article 'head))) ! (gnus-set-mode-line 'article))))) (defun gnus-summary-show-all-headers () "Make all header lines visible." *************** *** 7304,7310 **** 'request-replace-article gnus-newsgroup-name))) (error "The current group does not support article editing"))) (let ((articles (gnus-summary-work-articles n)) ! (prefix (gnus-group-real-prefix gnus-newsgroup-name)) (names '((move "Move" "Moving") (copy "Copy" "Copying") (crosspost "Crosspost" "Crossposting"))) --- 7307,7316 ---- 'request-replace-article gnus-newsgroup-name))) (error "The current group does not support article editing"))) (let ((articles (gnus-summary-work-articles n)) ! (prefix (if (gnus-check-backend-function ! 'request-move-article gnus-newsgroup-name) ! (gnus-group-real-prefix gnus-newsgroup-name) ! "")) (names '((move "Move" "Moving") (copy "Copy" "Copying") (crosspost "Crosspost" "Crossposting"))) *************** *** 7393,7402 **** (gnus-message 1 "Couldn't %s article %s: %s" (cadr (assq action names)) article (nnheader-get-report (car to-method)))) ! ((and (eq art-group 'junk) ! (eq action 'move)) ! (gnus-summary-mark-article article gnus-canceled-mark) ! (gnus-message 4 "Deleted article %s" article)) (t (let* ((pto-group (gnus-group-prefixed-name (car art-group) to-method)) --- 7399,7408 ---- (gnus-message 1 "Couldn't %s article %s: %s" (cadr (assq action names)) article (nnheader-get-report (car to-method)))) ! ((eq art-group 'junk) ! (when (eq action 'move) ! (gnus-summary-mark-article article gnus-canceled-mark) ! (gnus-message 4 "Deleted article %s" article))) (t (let* ((pto-group (gnus-group-prefixed-name (car art-group) to-method)) *************** *** 9041,9052 **** (error "No such group: %s" to-newsgroup))) to-newsgroup)) ! (defun gnus-summary-save-parts (type dir n reverse) "Save parts matching TYPE to DIR. If REVERSE, save parts that do not match TYPE." (interactive (list (read-string "Save parts of type: " "image/.*") ! (read-file-name "Save to directory: " t nil t) current-prefix-arg)) (gnus-summary-iterate n (let ((gnus-display-mime-function nil) --- 9047,9058 ---- (error "No such group: %s" to-newsgroup))) to-newsgroup)) ! (defun gnus-summary-save-parts (type dir n &optional reverse) "Save parts matching TYPE to DIR. If REVERSE, save parts that do not match TYPE." (interactive (list (read-string "Save parts of type: " "image/.*") ! (read-file-name "Save to directory: " nil nil t) current-prefix-arg)) (gnus-summary-iterate n (let ((gnus-display-mime-function nil) *** pub/pgnus/lisp/gnus-topic.el Wed Jan 5 17:09:42 2000 --- pgnus/lisp/gnus-topic.el Thu Apr 20 01:31:11 2000 *************** *** 594,600 **** (let* ((topic (gnus-group-topic group)) (groups (cdr (assoc topic gnus-topic-alist))) (g (cdr (member group groups))) ! (unfound t)) ;; Try to jump to a visible group. (while (and g (not (gnus-group-goto-group (car g) t))) (pop g)) --- 594,601 ---- (let* ((topic (gnus-group-topic group)) (groups (cdr (assoc topic gnus-topic-alist))) (g (cdr (member group groups))) ! (unfound t) ! entry) ;; Try to jump to a visible group. (while (and g (not (gnus-group-goto-group (car g) t))) (pop g)) *************** *** 608,615 **** (when (and unfound topic (not (gnus-topic-goto-missing-topic topic))) ! (gnus-topic-insert-topic-line ! topic t t (car (gnus-topic-find-topology topic)) nil 0))))) (defun gnus-topic-goto-missing-topic (topic) (if (gnus-topic-goto-topic topic) --- 609,628 ---- (when (and unfound topic (not (gnus-topic-goto-missing-topic topic))) ! (let* ((top (gnus-topic-find-topology topic)) ! (children (cddr top)) ! (type (cadr top)) ! (unread 0) ! (entries (gnus-topic-find-groups ! (car type) (car gnus-group-list-mode) ! (cdr gnus-group-list-mode)))) ! (while children ! (incf unread (gnus-topic-unread (caar (pop children))))) ! (while (setq entry (pop entries)) ! (when (numberp (car entry)) ! (incf unread (car entry)))) ! (gnus-topic-insert-topic-line ! topic t t (car (gnus-topic-find-topology topic)) nil unread)))))) (defun gnus-topic-goto-missing-topic (topic) (if (gnus-topic-goto-topic topic) *** pub/pgnus/lisp/gnus-uu.el Wed Jan 5 17:09:43 2000 --- pgnus/lisp/gnus-uu.el Thu Apr 20 01:31:12 2000 *************** *** 369,380 **** "k" gnus-summary-kill-process-mark "y" gnus-summary-yank-process-mark "w" gnus-summary-save-process-mark ! "i" gnus-uu-invert-processable ! "m" gnus-summary-save-parts) (gnus-define-keys (gnus-uu-extract-map "X" gnus-summary-mode-map) ;;"x" gnus-uu-extract-any ! ;;"m" gnus-uu-extract-mime "u" gnus-uu-decode-uu "U" gnus-uu-decode-uu-and-save "s" gnus-uu-decode-unshar --- 369,379 ---- "k" gnus-summary-kill-process-mark "y" gnus-summary-yank-process-mark "w" gnus-summary-save-process-mark ! "i" gnus-uu-invert-processable) (gnus-define-keys (gnus-uu-extract-map "X" gnus-summary-mode-map) ;;"x" gnus-uu-extract-any ! "m" gnus-summary-save-parts "u" gnus-uu-decode-uu "U" gnus-uu-decode-uu-and-save "s" gnus-uu-decode-unshar *** pub/pgnus/lisp/gnus-win.el Wed Jan 5 17:09:43 2000 --- pgnus/lisp/gnus-win.el Thu Apr 20 01:31:12 2000 *************** *** 446,457 **** (gnus-delete-windows-in-gnusey-frames)) ;; Just remove some windows. (gnus-remove-some-windows) ! (set-buffer nntp-server-buffer)) (select-frame frame))) (let (gnus-window-frame-focus) ! (set-buffer nntp-server-buffer) ! (gnus-configure-frame split) (when gnus-window-frame-focus (select-frame (window-frame gnus-window-frame-focus)))))))) --- 446,457 ---- (gnus-delete-windows-in-gnusey-frames)) ;; Just remove some windows. (gnus-remove-some-windows) ! (set-buffer nntp-server-buffer)) (select-frame frame))) (let (gnus-window-frame-focus) ! (set-buffer nntp-server-buffer) ! (gnus-configure-frame split) (when gnus-window-frame-focus (select-frame (window-frame gnus-window-frame-focus)))))))) *** pub/pgnus/lisp/gnus.el Wed Jan 5 17:09:43 2000 --- pgnus/lisp/gnus.el Thu Apr 20 01:31:14 2000 *************** *** 1,5 **** ;;; gnus.el --- a newsreader for GNU Emacs ! ;; Copyright (C) 1987-1990,1993-1999 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen --- 1,6 ---- ;;; gnus.el --- a newsreader for GNU Emacs ! ;; Copyright (C) 1987, 88, 89, 90, 93, 94, 95, 96, 97, 98, 99 ! ;; Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen *************** *** 31,40 **** (eval-when-compile (require 'cl)) (require 'mm-util) - (require 'custom) - (eval-and-compile - (if (< emacs-major-version 20) - (require 'gnus-load))) (require 'message) (defgroup gnus nil --- 32,37 ---- *************** *** 260,266 **** :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "5.8.3" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number) --- 257,263 ---- :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "5.8.4" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number) *************** *** 1616,1632 **** (when (consp function) (setq keymap (car (memq 'keymap function))) (setq function (car function))) ! (autoload function (car package) nil interactive keymap))) (if (eq (nth 1 package) ':interactive) ! (cdddr package) (cdr package))))) ! '(("metamail" metamail-buffer) ! ("info" Info-goto-node) ("pp" pp pp-to-string pp-eval-expression) ("qp" quoted-printable-decode-region quoted-printable-decode-string) ("ps-print" ps-print-preprint) ! ("mail-extr" mail-extract-address-components) ! ("browse-url" browse-url) ("message" :interactive t message-send-and-exit message-yank-original) ("babel" babel-as-string) --- 1613,1628 ---- (when (consp function) (setq keymap (car (memq 'keymap function))) (setq function (car function))) ! (unless (fboundp function) ! (autoload function (car package) nil interactive keymap)))) (if (eq (nth 1 package) ':interactive) ! (nthcdr 3 package) (cdr package))))) ! '(("info" :interactive t Info-goto-node) ("pp" pp pp-to-string pp-eval-expression) ("qp" quoted-printable-decode-region quoted-printable-decode-string) ("ps-print" ps-print-preprint) ! ("browse-url" :interactive t browse-url) ("message" :interactive t message-send-and-exit message-yank-original) ("babel" babel-as-string) *************** *** 2861,2870 **** (let ((window (get-buffer-window gnus-group-buffer))) (cond (window (select-frame (window-frame window))) ! (t ! (other-frame 1)))) (gnus arg)) ;;;###autoload (defun gnus (&optional arg dont-connect slave) "Read network news. --- 2857,2869 ---- (let ((window (get-buffer-window gnus-group-buffer))) (cond (window (select-frame (window-frame window))) ! (t ! (select-frame (make-frame))))) (gnus arg)) + ;;(setq thing ? ; this is a comment + ;; more 'yes) + ;;;###autoload (defun gnus (&optional arg dont-connect slave) "Read network news. *** pub/pgnus/lisp/ietf-drums.el Wed Jan 5 17:09:44 2000 --- pgnus/lisp/ietf-drums.el Thu Apr 20 01:31:14 2000 *************** *** 115,121 **** (buffer-string)))) (defun ietf-drums-remove-whitespace (string) ! "Remove comments from STRING." (with-temp-buffer (ietf-drums-init string) (let (c) --- 115,121 ---- (buffer-string)))) (defun ietf-drums-remove-whitespace (string) ! "Remove whitespace from STRING." (with-temp-buffer (ietf-drums-init string) (let (c) *************** *** 150,155 **** --- 150,159 ---- (t (forward-char 1)))) result))) + + (defun ietf-drums-strip (string) + "Remove comments and whitespace from STRING." + (ietf-drums-remove-whitespace (ietf-drums-remove-comments string))) (defun ietf-drums-parse-address (string) "Parse STRING and return a MAILBOX / DISPLAY-NAME pair." *** pub/pgnus/lisp/imap.el Wed Jan 5 17:09:44 2000 --- pgnus/lisp/imap.el Thu Apr 20 01:31:15 2000 *************** *** 74,82 **** ;; ;; imap.el support RFC1730/2060 (IMAP4/IMAP4rev1), implemented IMAP ;; extensions are RFC2195 (CRAM-MD5), RFC2086 (ACL), RFC2342 ! ;; (NAMESPACE), RFC2359 (UIDPLUS), and the kerberos V4 part of RFC1731 ! ;; (with use of external program `imtest'). It also take advantage ! ;; the UNSELECT extension in Cyrus IMAPD. ;; ;; Without the work of John McClary Prevost and Jim Radford this library ;; would not have seen the light of day. Many thanks. --- 74,84 ---- ;; ;; imap.el support RFC1730/2060 (IMAP4/IMAP4rev1), implemented IMAP ;; extensions are RFC2195 (CRAM-MD5), RFC2086 (ACL), RFC2342 ! ;; (NAMESPACE), RFC2359 (UIDPLUS), the IMAP-part of RFC2595 (STARTTLS) ! ;; (with use of external library starttls.el and program starttls) and ! ;; the GSSAPI / kerberos V4 sections of RFC1731 (with use of external ! ;; program `imtest'). It also take advantage the UNSELECT extension ! ;; in Cyrus IMAPD. ;; ;; Without the work of John McClary Prevost and Jim Radford this library ;; would not have seen the light of day. Many thanks. *************** *** 122,128 **** ;; o Don't use `read' at all (important places already fixed) ;; o Accept list of articles instead of message set string in most ;; imap-message-* functions. - ;; o Cyrus IMAPd 1.6.x `imtest' support in the imtest wrapper ;; ;; Revision history: ;; --- 124,129 ---- *************** *** 154,164 **** ;; User variables. ! (defvar imap-imtest-program "imtest -kp %s %p" ! "How to call program for Kerberos 4 authentication. ! %s is replaced with server and %p with port to connect to. The ! program should accept IMAP commands on stdin and return responses to ! stdout.") (defvar imap-ssl-program '("openssl s_client -ssl3 -connect %s:%p" "openssl s_client -ssl2 -connect %s:%p" --- 155,172 ---- ;; User variables. ! (defvar imap-kerberos4-program '("imtest -m kerberos_v4 -u %l -p %p %s" ! "imtest -kp %s %p") ! "List of strings containing commands for Kerberos 4 authentication. ! %s is replaced with server hostname, %p with port to connect to, and ! %l with the value of `imap-default-user'. The program should accept ! IMAP commands on stdin and return responses to stdout.") ! ! (defvar imap-gssapi-program '("imtest -m gssapi -u %l -p %p %s") ! "List of strings containing commands for GSSAPI (krb5) authentication. ! %s is replaced with server hostname, %p with port to connect to, and ! %l with the value of `imap-default-user'. The program should accept ! IMAP commands on stdin and return responses to stdout.") (defvar imap-ssl-program '("openssl s_client -ssl3 -connect %s:%p" "openssl s_client -ssl2 -connect %s:%p" *************** *** 180,193 **** (defvar imap-fetch-data-hook nil "Hooks called after receiving each FETCH response.") ! (defvar imap-streams '(kerberos4 starttls ssl network) "Priority of streams to consider when opening connection to server.") (defvar imap-stream-alist ! '((kerberos4 imap-kerberos4s-p imap-kerberos4-open) ! (ssl imap-ssl-p imap-ssl-open) ! (network imap-network-p imap-network-open) ! (starttls imap-starttls-p imap-starttls-open)) "Definition of network streams. (NAME CHECK OPEN) --- 188,202 ---- (defvar imap-fetch-data-hook nil "Hooks called after receiving each FETCH response.") ! (defvar imap-streams '(gssapi kerberos4 starttls ssl network) "Priority of streams to consider when opening connection to server.") (defvar imap-stream-alist ! '((gssapi imap-gssapi-stream-p imap-gssapi-open) ! (kerberos4 imap-kerberos4-stream-p imap-kerberos4-open) ! (ssl imap-ssl-p imap-ssl-open) ! (network imap-network-p imap-network-open) ! (starttls imap-starttls-p imap-starttls-open)) "Definition of network streams. (NAME CHECK OPEN) *************** *** 196,210 **** server support the stream and OPEN is a function for opening the stream.") ! (defvar imap-authenticators '(kerberos4 digest-md5 cram-md5 login anonymous) "Priority of authenticators to consider when authenticating to server.") (defvar imap-authenticator-alist ! '((kerberos4 imap-kerberos4a-p imap-kerberos4-auth) ! (cram-md5 imap-cram-md5-p imap-cram-md5-auth) ! (login imap-login-p imap-login-auth) ! (anonymous imap-anonymous-p imap-anonymous-auth) ! (digest-md5 imap-digest-md5-p imap-digest-md5-auth)) "Definition of authenticators. (NAME CHECK AUTHENTICATE) --- 205,225 ---- server support the stream and OPEN is a function for opening the stream.") ! (defvar imap-authenticators '(gssapi ! kerberos4 ! digest-md5 ! cram-md5 ! login ! anonymous) "Priority of authenticators to consider when authenticating to server.") (defvar imap-authenticator-alist ! '((gssapi imap-gssapi-auth-p imap-gssapia-auth) ! (kerberos4 imap-kerberos4-auth-p imap-kerberos4-auth) ! (cram-md5 imap-cram-md5-p imap-cram-md5-auth) ! (login imap-login-p imap-login-auth) ! (anonymous imap-anonymous-p imap-anonymous-auth) ! (digest-md5 imap-digest-md5-p imap-digest-md5-auth)) "Definition of authenticators. (NAME CHECK AUTHENTICATE) *************** *** 376,421 **** ;; Server functions; stream stuff: ! (defun imap-kerberos4s-p (buffer) (imap-capability 'AUTH=KERBEROS_V4 buffer)) (defun imap-kerberos4-open (name buffer server port) ! (message "Opening Kerberized IMAP connection...") ! (let* ((port (or port imap-default-port)) ! (coding-system-for-read imap-coding-system-for-read) ! (coding-system-for-write imap-coding-system-for-write) ! (process (start-process ! name buffer shell-file-name shell-command-switch ! (format-spec ! imap-imtest-program ! (format-spec-make ?s server ?p (number-to-string port)))))) ! (when process ! (with-current-buffer buffer ! (setq imap-client-eol "\n") ! ;; Result of authentication is a string: __Full privacy protection__ ! (while (and (memq (process-status process) '(open run)) ! (goto-char (point-min)) ! (not (and (imap-parse-greeting) ! (re-search-forward "__\\(.*\\)__\n" nil t)))) ! (accept-process-output process 1) ! (sit-for 1)) ! (and imap-log ! (with-current-buffer (get-buffer-create imap-log) ! (imap-disable-multibyte) ! (buffer-disable-undo) ! (goto-char (point-max)) ! (insert-buffer-substring buffer))) ! (let ((response (match-string 1))) ! (erase-buffer) ! (message "Kerberized IMAP connection: %s" response) ! (if (and response (let ((case-fold-search nil)) ! (not (string-match "failed" response)))) ! process ! (if (memq (process-status process) '(open run)) ! (imap-send-command-wait "LOGOUT")) ! (delete-process process) ! nil)))))) (defun imap-ssl-p (buffer) nil) --- 391,509 ---- ;; Server functions; stream stuff: ! (defun imap-kerberos4-stream-p (buffer) (imap-capability 'AUTH=KERBEROS_V4 buffer)) (defun imap-kerberos4-open (name buffer server port) ! (let ((cmds imap-kerberos4-program) ! cmd done) ! (while (and (not done) (setq cmd (pop cmds))) ! (message "Opening Kerberos 4 IMAP connection with `%s'..." cmd) ! (let* ((port (or port imap-default-port)) ! (coding-system-for-read imap-coding-system-for-read) ! (coding-system-for-write imap-coding-system-for-write) ! (process (start-process ! name buffer shell-file-name shell-command-switch ! (format-spec ! cmd ! (format-spec-make ! ?s server ! ?p (number-to-string port) ! ?l imap-default-user)))) ! response) ! (when process ! (with-current-buffer buffer ! (setq imap-client-eol "\n") ! (while (and (memq (process-status process) '(open run)) ! (goto-char (point-min)) ! ;; cyrus 1.6.x (13? < x <= 22) queries capabilities ! (or (while (looking-at "^C:") ! (forward-line)) ! t) ! ;; cyrus 1.6 imtest print "S: " before server greeting ! (or (not (looking-at "S: ")) ! (forward-char 3) ! t) ! (not (and (imap-parse-greeting) ! ;; success in imtest < 1.6: ! (or (re-search-forward ! "^__\\(.*\\)__\n" nil t) ! ;; success in imtest 1.6: ! (re-search-forward ! "^\\(Authenticat.*\\)" nil t)) ! (setq response (match-string 1))))) ! (accept-process-output process 1) ! (sit-for 1)) ! (and imap-log ! (with-current-buffer (get-buffer-create imap-log) ! (imap-disable-multibyte) ! (buffer-disable-undo) ! (goto-char (point-max)) ! (insert-buffer-substring buffer))) ! (erase-buffer) ! (message "Kerberos 4 IMAP connection: %s" (or response "failed")) ! (if (and response (let ((case-fold-search nil)) ! (not (string-match "failed" response)))) ! (setq done process) ! (if (memq (process-status process) '(open run)) ! (imap-send-command-wait "LOGOUT")) ! (delete-process process) ! nil))))) ! done)) + (defun imap-gssapi-stream-p (buffer) + (imap-capability 'AUTH=GSSAPI buffer)) + + (defun imap-gssapi-open (name buffer server port) + (let ((cmds imap-gssapi-program) + cmd done) + (while (and (not done) (setq cmd (pop cmds))) + (message "Opening GSSAPI IMAP connection with `%s'..." cmd) + (let* ((port (or port imap-default-port)) + (coding-system-for-read imap-coding-system-for-read) + (coding-system-for-write imap-coding-system-for-write) + (process (start-process + name buffer shell-file-name shell-command-switch + (format-spec + cmd + (format-spec-make + ?s server + ?p (number-to-string port) + ?l imap-default-user)))) + response) + (when process + (with-current-buffer buffer + (setq imap-client-eol "\n") + (while (and (memq (process-status process) '(open run)) + (goto-char (point-min)) + ;; cyrus 1.6 imtest print "S: " before server greeting + (or (not (looking-at "S: ")) + (forward-char 3) + t) + (not (and (imap-parse-greeting) + ;; success in imtest 1.6: + (re-search-forward + "^\\(Authenticat.*\\)" nil t) + (setq response (match-string 1))))) + (accept-process-output process 1) + (sit-for 1)) + (and imap-log + (with-current-buffer (get-buffer-create imap-log) + (imap-disable-multibyte) + (buffer-disable-undo) + (goto-char (point-max)) + (insert-buffer-substring buffer))) + (erase-buffer) + (message "GSSAPI IMAP connection: %s" (or response "failed")) + (if (and response (let ((case-fold-search nil)) + (not (string-match "failed" response)))) + (setq done process) + (if (memq (process-status process) '(open run)) + (imap-send-command-wait "LOGOUT")) + (delete-process process) + nil))))) + done)) + (defun imap-ssl-p (buffer) nil) *************** *** 558,564 **** ;; passwd nil)))) ret))) ! (defun imap-kerberos4a-p (buffer) (imap-capability 'AUTH=KERBEROS_V4 buffer)) (defun imap-kerberos4-auth (buffer) --- 646,658 ---- ;; passwd nil)))) ret))) ! (defun imap-gssapi-auth-p (buffer) ! (imap-capability 'AUTH=GSSAPI buffer)) ! ! (defun imap-gssapi-auth (buffer) ! (eq imap-stream 'gssapi)) ! ! (defun imap-kerberos4-auth-p (buffer) (imap-capability 'AUTH=KERBEROS_V4 buffer)) (defun imap-kerberos4-auth (buffer) *************** *** 1001,1009 **** (list items)))))) (if (listp items) (mapcar (lambda (item) ! (imap-mailbox-get-1 item mailbox)) items) ! (imap-mailbox-get-1 items mailbox))))) (defun imap-mailbox-acl-get (&optional mailbox buffer) "Get ACL on mailbox from server in BUFFER." --- 1095,1103 ---- (list items)))))) (if (listp items) (mapcar (lambda (item) ! (imap-mailbox-get item mailbox)) items) ! (imap-mailbox-get items mailbox))))) (defun imap-mailbox-acl-get (&optional mailbox buffer) "Get ACL on mailbox from server in BUFFER." *************** *** 1265,1274 **** "Return number of lines in article by looking at the mime bodystructure BODY." (if (listp body) (if (stringp (car body)) ! (cond ((and (string= (car body) "TEXT") (numberp (nth 7 body))) (nth 7 body)) ! ((and (string= (car body) "MESSAGE") (numberp (nth 9 body))) (nth 9 body)) (t 0)) --- 1359,1369 ---- "Return number of lines in article by looking at the mime bodystructure BODY." (if (listp body) (if (stringp (car body)) ! ;; upcase for bug in courier imap server ! (cond ((and (string= (upcase (car body)) "TEXT") (numberp (nth 7 body))) (nth 7 body)) ! ((and (string= (upcase (car body)) "MESSAGE") (numberp (nth 9 body))) (nth 9 body)) (t 0)) *************** *** 1318,1330 **** (if (not (eq (imap-wait-for-tag tag) 'INCOMPLETE)) (setq command nil);; abort command if no cont-req (let ((process imap-process) ! (stream imap-stream)) (with-current-buffer cmd ! (when (eq stream 'kerberos4) ;; XXX modifies buffer! (goto-char (point-min)) (while (search-forward "\r\n" nil t) ! (replace-match "\n"))) (and imap-log (with-current-buffer (get-buffer-create imap-log) --- 1413,1426 ---- (if (not (eq (imap-wait-for-tag tag) 'INCOMPLETE)) (setq command nil);; abort command if no cont-req (let ((process imap-process) ! (stream imap-stream) ! (eol imap-client-eol)) (with-current-buffer cmd ! (when (not (equal eol "\r\n")) ;; XXX modifies buffer! (goto-char (point-min)) (while (search-forward "\r\n" nil t) ! (replace-match eol))) (and imap-log (with-current-buffer (get-buffer-create imap-log) *** pub/pgnus/lisp/lpath.el Wed Jan 5 17:09:44 2000 --- pgnus/lisp/lpath.el Thu Apr 20 01:31:16 2000 *************** *** 41,47 **** rmail-summary-exists rmail-select-summary rmail-update-summary url-retrieve temp-directory babel-fetch babel-wash ! find-coding-systems-for-charsets sc-cite-regexp)) (maybe-bind '(global-face-data mark-active transient-mark-mode mouse-selection-click-count mouse-selection-click-count-buffer buffer-display-table --- 41,48 ---- rmail-summary-exists rmail-select-summary rmail-update-summary url-retrieve temp-directory babel-fetch babel-wash ! find-coding-systems-for-charsets sc-cite-regexp ! vcard-pretty-print)) (maybe-bind '(global-face-data mark-active transient-mark-mode mouse-selection-click-count mouse-selection-click-count-buffer buffer-display-table *************** *** 57,63 **** url-current-callback-func url-current-callback-data url-be-asynchronous temporary-file-directory babel-translations babel-history ! display-time-mail-function))) (maybe-bind '(mail-mode-hook enable-multibyte-characters browse-url-browser-function adaptive-fill-first-line-regexp adaptive-fill-regexp --- 58,65 ---- url-current-callback-func url-current-callback-data url-be-asynchronous temporary-file-directory babel-translations babel-history ! display-time-mail-function imap-password ! ))) (maybe-bind '(mail-mode-hook enable-multibyte-characters browse-url-browser-function adaptive-fill-first-line-regexp adaptive-fill-regexp *************** *** 65,71 **** w3-meta-content-type-charset-regexp w3-meta-charset-content-type-regexp babel-translations babel-history ! display-time-mail-function)) (maybe-fbind '(color-instance-rgb-components temp-directory glyph-width annotation-glyph window-pixel-width glyph-height --- 67,73 ---- w3-meta-content-type-charset-regexp w3-meta-charset-content-type-regexp babel-translations babel-history ! display-time-mail-function imap-password)) (maybe-fbind '(color-instance-rgb-components temp-directory glyph-width annotation-glyph window-pixel-width glyph-height *************** *** 91,97 **** w3-coding-system-for-mime-charset rmail-summary-exists rmail-select-summary rmail-update-summary url-generic-parse-url valid-image-instantiator-format-p ! babel-fetch babel-wash babel-as-string sc-cite-regexp))) (setq load-path (cons "." load-path)) (require 'custom) --- 93,100 ---- w3-coding-system-for-mime-charset rmail-summary-exists rmail-select-summary rmail-update-summary url-generic-parse-url valid-image-instantiator-format-p ! babel-fetch babel-wash babel-as-string sc-cite-regexp ! vcard-pretty-print))) (setq load-path (cons "." load-path)) (require 'custom) *** pub/pgnus/lisp/mail-parse.el Sat Jan 16 04:21:00 1999 --- pgnus/lisp/mail-parse.el Thu Apr 20 01:31:16 2000 *************** *** 49,54 **** --- 49,55 ---- (defalias 'mail-header-remove-comments 'ietf-drums-remove-comments) (defalias 'mail-header-remove-whitespace 'ietf-drums-remove-whitespace) + (defalias 'mail-header-strip 'ietf-drums-strip) (defalias 'mail-header-get-comment 'ietf-drums-get-comment) (defalias 'mail-header-parse-address 'ietf-drums-parse-address) (defalias 'mail-header-parse-addresses 'ietf-drums-parse-addresses) *** pub/pgnus/lisp/mail-source.el Wed Jan 5 17:09:44 2000 --- pgnus/lisp/mail-source.el Thu Apr 20 01:31:17 2000 *************** *** 632,646 **** (defun mail-source-fetch-imap (source callback) "Fetcher for imap sources." (mail-source-bind (imap source) ! (let ((found 0) (buf (get-buffer-create (generate-new-buffer-name " *imap source*"))) (mail-source-string (format "imap:%s:%s" server mailbox)) remove) (if (and (imap-open server port stream authentication buf) ! (imap-authenticate user password buf) (imap-mailbox-select mailbox nil buf)) (let (str (coding-system-for-write 'binary)) (with-temp-file mail-source-crash-box ;; if predicate is nil, use all uids (dolist (uid (imap-search (or predicate "1:*") buf)) (when (setq str (imap-fetch uid "RFC822.PEEK" 'RFC822 nil buf)) --- 632,654 ---- (defun mail-source-fetch-imap (source callback) "Fetcher for imap sources." (mail-source-bind (imap source) ! (let ((from (format "%s:%s:%s" server user port)) ! (found 0) (buf (get-buffer-create (generate-new-buffer-name " *imap source*"))) (mail-source-string (format "imap:%s:%s" server mailbox)) remove) (if (and (imap-open server port stream authentication buf) ! (imap-authenticate ! user (or (cdr (assoc from mail-source-password-cache)) ! password) buf) (imap-mailbox-select mailbox nil buf)) (let (str (coding-system-for-write 'binary)) (with-temp-file mail-source-crash-box + ;; remember password + (with-current-buffer buf + (when (or imap-password + (assoc from mail-source-password-cache)) + (push (cons from imap-password) mail-source-password-cache))) ;; if predicate is nil, use all uids (dolist (uid (imap-search (or predicate "1:*") buf)) (when (setq str (imap-fetch uid "RFC822.PEEK" 'RFC822 nil buf)) *************** *** 661,666 **** --- 669,679 ---- (imap-mailbox-close buf)) (imap-close buf)) (imap-close buf) + ;; We nix out the password in case the error + ;; was because of a wrong password being given. + (setq mail-source-password-cache + (delq (assoc from mail-source-password-cache) + mail-source-password-cache)) (error (imap-error-text buf))) (kill-buffer buf) found))) *************** *** 677,684 **** (when (eq authentication 'password) (setq password (or password (mail-source-read-passwd ! (format "Password for %s at %s: " user subtype))))) (webmail-fetch mail-source-crash-box subtype user password) (mail-source-callback callback (symbol-name subtype))))) --- 690,704 ---- (when (eq authentication 'password) (setq password (or password + (cdr (assoc (format "webmail:%s:%s" subtype user) + mail-source-password-cache)) (mail-source-read-passwd ! (format "Password for %s at %s: " user subtype)))) ! (when (and password ! (not (assoc (format "webmail:%s:%s" subtype user) ! mail-source-password-cache))) ! (push (cons (format "webmail:%s:%s" subtype user) password) ! mail-source-password-cache))) (webmail-fetch mail-source-crash-box subtype user password) (mail-source-callback callback (symbol-name subtype))))) *** pub/pgnus/lisp/mailcap.el Wed Jan 5 17:09:45 2000 --- pgnus/lisp/mailcap.el Thu Apr 20 01:31:18 2000 *************** *** 714,719 **** --- 714,720 ---- (".cpio" . "application/x-cpio") (".csh" . "application/x-csh") (".dvi" . "application/x-dvi") + (".diff" . "text/x-patch") (".el" . "application/emacs-lisp") (".eps" . "application/postscript") (".etx" . "text/x-setext") *************** *** 800,810 **** ((memq system-type '(ms-dos ms-windows windows-nt)) (setq path (mapconcat 'expand-file-name '("~/mime.typ" "~/etc/mime.typ") ";"))) ! (t (setq path (mapconcat 'expand-file-name ! '("~/.mime-types" ! "/etc/mime-types:/usr/etc/mime-types" ! "/usr/local/etc/mime-types" ! "/usr/local/www/conf/mime-types") ":")))) (let ((fnames (reverse (split-string path (if (memq system-type --- 801,821 ---- ((memq system-type '(ms-dos ms-windows windows-nt)) (setq path (mapconcat 'expand-file-name '("~/mime.typ" "~/etc/mime.typ") ";"))) ! (t (setq path (mapconcat ! 'expand-file-name ! ;; mime.types seems to be the normal name, ! ;; definitely so on current GNUish systems. The ! ;; ordering follows that for mailcap. ! '("~/.mime.types" ! "/etc/mime.types" ! "/usr/etc/mime.types" ! "/usr/local/etc/mime.types" ! "/usr/local/www/conf/mime.types" ! "~/.mime-types" ! "/etc/mime-types" ! "/usr/etc/mime-types" ! "/usr/local/etc/mime-types" ! "/usr/local/www/conf/mime-types") ":")))) (let ((fnames (reverse (split-string path (if (memq system-type *** pub/pgnus/lisp/message.el Wed Jan 5 17:09:45 2000 --- pgnus/lisp/message.el Thu Apr 20 01:31:19 2000 *************** *** 33,39 **** (require 'mailheader) (require 'nnheader) (require 'easymenu) - (require 'custom) (if (string-match "XEmacs\\|Lucid" emacs-version) (require 'mail-abbrevs) (require 'mailabbrev)) --- 33,38 ---- *************** *** 2135,2141 **** (news (message-news-p)) (mailbuf (current-buffer)) (message-this-is-mail t) ! (message-posting-charset (gnus-setup-posting-charset nil))) (save-restriction (message-narrow-to-headers) ;; Insert some headers. --- 2134,2143 ---- (news (message-news-p)) (mailbuf (current-buffer)) (message-this-is-mail t) ! (message-posting-charset ! (if (fboundp 'gnus-setup-posting-charset) ! (gnus-setup-posting-charset nil) ! message-posting-charset))) (save-restriction (message-narrow-to-headers) ;; Insert some headers. *************** *** 2179,2185 **** (defun message-send-mail-with-sendmail () "Send off the prepared buffer with sendmail." (let ((errbuf (if message-interactive ! (message-generate-new-buffer-clone-locals " sendmail errors") 0)) resend-to-addresses delimline) (let ((case-fold-search t)) --- 2181,2188 ---- (defun message-send-mail-with-sendmail () "Send off the prepared buffer with sendmail." (let ((errbuf (if message-interactive ! (message-generate-new-buffer-clone-locals ! " sendmail errors") 0)) resend-to-addresses delimline) (let ((case-fold-search t)) *************** *** 2397,2403 **** (defun message-check-news-header-syntax () (and ;; Check Newsgroups header. ! (message-check 'newsgroyps (let ((group (message-fetch-field "newsgroups"))) (or (and group --- 2400,2406 ---- (defun message-check-news-header-syntax () (and ;; Check Newsgroups header. ! (message-check 'newsgroups (let ((group (message-fetch-field "newsgroups"))) (or (and group *************** *** 3793,3798 **** --- 3796,3803 ---- (cond ((save-window-excursion (if (not (eq system-type 'vax-vms)) (with-output-to-temp-buffer "*Directory*" + (with-current-buffer standard-output + (fundamental-mode)) ; for Emacs 20.4+ (buffer-disable-undo standard-output) (let ((default-directory "/")) (call-process *************** *** 4161,4166 **** --- 4166,4172 ---- (save-excursion (with-output-to-temp-buffer " *MESSAGE information message*" (set-buffer " *MESSAGE information message*") + (fundamental-mode) ; for Emacs 20.4+ (mapcar 'princ text) (goto-char (point-min)))) (funcall ask question)) *** pub/pgnus/lisp/mm-bodies.el Wed Jan 5 17:09:46 2000 --- pgnus/lisp/mm-bodies.el Thu Apr 20 01:31:20 2000 *************** *** 150,164 **** ((eq encoding 'quoted-printable) (quoted-printable-decode-region (point-min) (point-max))) ((eq encoding 'base64) ! (base64-decode-region (point-min) ! ;; Some mailers insert whitespace ! ;; junk at the end which ! ;; base64-decode-region dislikes. ! (save-excursion ! (goto-char (point-max)) ! (skip-chars-backward "\n\t ") ! (delete-region (point) (point-max)) ! (point)))) ((memq encoding '(7bit 8bit binary)) ;; Do nothing. ) --- 150,165 ---- ((eq encoding 'quoted-printable) (quoted-printable-decode-region (point-min) (point-max))) ((eq encoding 'base64) ! (base64-decode-region ! (point-min) ! ;; Some mailers insert whitespace ! ;; junk at the end which ! ;; base64-decode-region dislikes. ! (save-excursion ! (goto-char (point-max)) ! (skip-chars-backward "\n\t ") ! (delete-region (point) (point-max)) ! (point)))) ((memq encoding '(7bit 8bit binary)) ;; Do nothing. ) *** pub/pgnus/lisp/mm-decode.el Wed Jan 5 17:09:46 2000 --- pgnus/lisp/mm-decode.el Thu Apr 20 01:31:21 2000 *************** *** 220,225 **** --- 220,227 ---- cd (mail-fetch-field "content-disposition") description (mail-fetch-field "content-description") id (mail-fetch-field "content-id")))) + (when cte + (setq cte (mail-header-strip cte))) (if (or (not ctl) (not (string-match "/" (car ctl)))) (mm-dissect-singlepart *************** *** 255,261 **** (defun mm-dissect-singlepart (ctl cte &optional force cdl description id) (when (or force ! (not (equal "text/plain" (car ctl)))) (let ((res (mm-make-handle (mm-copy-to-buffer) ctl cte nil cdl description nil id))) (push (car res) mm-dissection-list) --- 257,265 ---- (defun mm-dissect-singlepart (ctl cte &optional force cdl description id) (when (or force ! (if (equal "text/plain" (car ctl)) ! (assoc 'format ctl) ! t)) (let ((res (mm-make-handle (mm-copy-to-buffer) ctl cte nil cdl description nil id))) (push (car res) mm-dissection-list) *************** *** 433,452 **** (defun mm-mailcap-command (method file type-list) (let ((ctl (cdr type-list)) (beg 0) out sub total) ! (while (string-match "%{\\([^}]+\\)}\\|%s\\|%t" method beg) (push (substring method beg (match-beginning 0)) out) (setq beg (match-end 0) total (match-string 0 method) sub (match-string 1 method)) (cond ((string= total "%s") (push (mm-quote-arg file) out)) ((string= total "%t") (push (mm-quote-arg (car type-list)) out)) (t (push (mm-quote-arg (or (cdr (assq (intern sub) ctl)) "")) out)))) (push (substring method beg (length method)) out) (mapconcat 'identity (nreverse out) ""))) (defun mm-remove-parts (handles) --- 437,464 ---- (defun mm-mailcap-command (method file type-list) (let ((ctl (cdr type-list)) (beg 0) + (uses-stdin t) out sub total) ! (while (string-match "%{\\([^}]+\\)}\\|%s\\|%t\\|%%" method beg) (push (substring method beg (match-beginning 0)) out) (setq beg (match-end 0) total (match-string 0 method) sub (match-string 1 method)) (cond + ((string= total "%%") + (push "%" out)) ((string= total "%s") + (setq uses-stdin nil) (push (mm-quote-arg file) out)) ((string= total "%t") (push (mm-quote-arg (car type-list)) out)) (t (push (mm-quote-arg (or (cdr (assq (intern sub) ctl)) "")) out)))) (push (substring method beg (length method)) out) + (if uses-stdin + (progn + (push "<" out) + (push (mm-quote-arg file) out))) (mapconcat 'identity (nreverse out) ""))) (defun mm-remove-parts (handles) *** pub/pgnus/lisp/mm-util.el Wed Jan 5 17:09:47 2000 --- pgnus/lisp/mm-util.el Thu Apr 20 01:31:22 2000 *************** *** 94,99 **** --- 94,106 ---- prompt (mapcar (lambda (s) (list (symbol-name (car s)))) mm-mime-mule-charset-alist))))))) + (eval-and-compile + (defalias 'mm-char-or-char-int-p + (cond + ((fboundp 'char-or-char-int-p) 'char-or-char-int-p) + ((fboundp 'char-valid-p) 'char-valid-p) + (t 'identity)))) + (defvar mm-coding-system-list nil) (defun mm-get-coding-system-list () "Get the coding system list." *************** *** 241,247 **** (defun mm-mime-charset (charset) "Return the MIME charset corresponding to the MULE CHARSET." ! (if (fboundp 'coding-system-get) ;; This exists in Emacs 20. (or (and (mm-preferred-coding-system charset) --- 248,254 ---- (defun mm-mime-charset (charset) "Return the MIME charset corresponding to the MULE CHARSET." ! (if (and (fboundp 'coding-system-get) (fboundp 'get-charset-property)) ;; This exists in Emacs 20. (or (and (mm-preferred-coding-system charset) *** pub/pgnus/lisp/mm-view.el Wed Jan 5 17:09:47 2000 --- pgnus/lisp/mm-view.el Thu Apr 20 01:31:22 2000 *************** *** 33,38 **** --- 33,39 ---- (autoload 'gnus-article-prepare-display "gnus-art") (autoload 'vcard-parse-string "vcard") (autoload 'vcard-format-string "vcard") + (autoload 'fill-flowed "fill-flowed") (autoload 'diff-mode "diff-mode")) ;;; *************** *** 127,141 **** (mm-insert-inline handle (concat "\n-- \n" ! (vcard-format-string ! (vcard-parse-string (mm-get-part handle) ! 'vcard-standard-filter))))) (t (setq text (mm-get-part handle)) (let ((b (point)) (charset (mail-content-type-get (mm-handle-type handle) 'charset))) (insert (mm-decode-string text charset)) (save-restriction (narrow-to-region b (point)) (set-text-properties (point-min) (point-max) nil) --- 128,152 ---- (mm-insert-inline handle (concat "\n-- \n" ! (if (fboundp 'vcard-pretty-print) ! (vcard-pretty-print (mm-get-part handle)) ! (vcard-format-string ! (vcard-parse-string (mm-get-part handle) ! 'vcard-standard-filter)))))) (t (setq text (mm-get-part handle)) (let ((b (point)) (charset (mail-content-type-get (mm-handle-type handle) 'charset))) (insert (mm-decode-string text charset)) + (when (and (equal type "plain") + (equal (cdr (assoc 'format (mm-handle-type handle))) + "flowed")) + (save-restriction + (narrow-to-region b (point)) + (goto-char b) + (fill-flowed) + (goto-char (point-max)))) (save-restriction (narrow-to-region b (point)) (set-text-properties (point-min) (point-max) nil) *** pub/pgnus/lisp/nnfolder.el Wed Jan 5 17:09:49 2000 --- pgnus/lisp/nnfolder.el Thu Apr 20 01:31:23 2000 *************** *** 746,752 **** buffer (push (list group buffer) nnfolder-buffer-alist) (set-buffer-modified-p t) ! (save-buffer)) ;; Parse the damn thing. (save-excursion (goto-char (point-min)) --- 746,752 ---- buffer (push (list group buffer) nnfolder-buffer-alist) (set-buffer-modified-p t) ! (nnfolder-save-buffer)) ;; Parse the damn thing. (save-excursion (goto-char (point-min)) *** pub/pgnus/lisp/nnheader.el Wed Jan 5 17:09:49 2000 --- pgnus/lisp/nnheader.el Thu Apr 20 01:31:23 2000 *************** *** 1,6 **** - ;;; nnheader.el --- header access macros for Gnus and its backends ! ;; Copyright (C) 1987-1990,1993-1999 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen --- 1,7 ---- ;;; nnheader.el --- header access macros for Gnus and its backends ! ! ;; Copyright (C) 1987, 88, 89, 90, 93, 94, 95, 96, 97, 98, 99 ! ;; Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen *************** *** 728,741 **** (concat (let ((dir (file-name-as-directory (expand-file-name dir)))) ;; If this directory exists, we use it directly. ! (if (file-directory-p (concat dir group)) ! (concat dir group "/") ! ;; If not, we translate dots into slashes. ! (concat dir ! (mm-encode-coding-string ! (nnheader-replace-chars-in-string group ?. ?/) ! nnheader-pathname-coding-system) ! "/"))) (cond ((null file) "") ((numberp file) (int-to-string file)) (t file)))) --- 729,742 ---- (concat (let ((dir (file-name-as-directory (expand-file-name dir)))) ;; If this directory exists, we use it directly. ! (file-name-as-directory ! (if (file-directory-p (concat dir group)) ! (expand-file-name group dir) ! ;; If not, we translate dots into slashes. ! (expand-file-name (mm-encode-coding-string ! (nnheader-replace-chars-in-string group ?. ?/) ! nnheader-pathname-coding-system) ! dir)))) (cond ((null file) "") ((numberp file) (int-to-string file)) (t file)))) *** pub/pgnus/lisp/nnimap.el Wed Jan 5 17:09:49 2000 --- pgnus/lisp/nnimap.el Thu Apr 20 01:31:24 2000 *************** *** 126,131 **** --- 126,138 ---- be called with the headers narrowed and should return a group where it thinks the article should be splitted to.") + (defvar nnimap-split-predicate "UNSEEN UNDELETED" + "The predicate used to find articles to split. + If you use another IMAP client to peek on articles but always would + like nnimap to split them once it's started, you could change this to + \"UNDELETED\". Other available predicates are available in + RFC2060 section 6.4.4.") + (defvar nnimap-split-fancy nil "Like `nnmail-split-fancy', which see.") *************** *** 361,369 **** nnimap-progress-how-often) nnimap-progress-chars))) (with-current-buffer nntp-server-buffer ! (let (headers lines chars uid) (with-current-buffer nnimap-server-buffer (setq uid imap-current-message headers (if (imap-capability 'IMAP4rev1) ;; xxx don't just use car? alist doesn't contain ;; anything else now, but it might... --- 368,377 ---- nnimap-progress-how-often) nnimap-progress-chars))) (with-current-buffer nntp-server-buffer ! (let (headers lines chars uid mbx) (with-current-buffer nnimap-server-buffer (setq uid imap-current-message + mbx imap-current-mailbox headers (if (imap-capability 'IMAP4rev1) ;; xxx don't just use car? alist doesn't contain ;; anything else now, but it might... *************** *** 376,385 **** --- 384,397 ---- (buffer-disable-undo) (insert headers) (nnheader-ms-strip-cr) + (nnheader-fold-continuation-lines) + (subst-char-in-region (point-min) (point-max) ?\t ? ) (let ((head (nnheader-parse-head 'naked))) (mail-header-set-number head uid) (mail-header-set-chars head chars) (mail-header-set-lines head lines) + (mail-header-set-xref + head (format "%s %s:%d" (system-name) mbx uid)) head)))))) (defun nnimap-retrieve-which-headers (articles fetch-old) *************** *** 492,499 **** ;; remove nov's for articles which has expired on server (goto-char (point-min)) (dolist (uid (gnus-set-difference articles uids)) ! (when (re-search-forward (format "^%d\t" uid) nil t) ! (gnus-delete-line))))) ;; nothing cached, fetch whole range from server (nnimap-retrieve-headers-from-server (cons low high) group server)) --- 504,511 ---- ;; remove nov's for articles which has expired on server (goto-char (point-min)) (dolist (uid (gnus-set-difference articles uids)) ! (when (re-search-forward (format "^%d\t" uid) nil t) ! (gnus-delete-line))))) ;; nothing cached, fetch whole range from server (nnimap-retrieve-headers-from-server (cons low high) group server)) *************** *** 602,609 **** (nnheader-ms-strip-cr) (funcall nnimap-callback-callback-function t))) ! (defun nnimap-request-article-part (article part prop ! &optional group server to-buffer) (when (nnimap-possibly-change-group group server) (let ((article (if (stringp article) (car-safe (imap-search --- 614,621 ---- (nnheader-ms-strip-cr) (funcall nnimap-callback-callback-function t))) ! (defun nnimap-request-article-part (article part prop &optional ! group server to-buffer detail) (when (nnimap-possibly-change-group group server) (let ((article (if (stringp article) (car-safe (imap-search *************** *** 615,623 **** (if (not nnheader-callback-function) (with-current-buffer (or to-buffer nntp-server-buffer) (erase-buffer) ! (insert (nnimap-demule (imap-fetch article part prop nil ! nnimap-server-buffer))) ! (nnheader-ms-strip-cr) (gnus-message 9 "nnimap: Fetching (part of) article %d...done" article) (if (bobp) --- 627,638 ---- (if (not nnheader-callback-function) (with-current-buffer (or to-buffer nntp-server-buffer) (erase-buffer) ! (let ((data (imap-fetch article part prop nil ! nnimap-server-buffer))) ! (insert (nnimap-demule (if detail ! (nth 2 (car data)) ! data)))) ! (nnheader-ms-strip-cr) (gnus-message 9 "nnimap: Fetching (part of) article %d...done" article) (if (bobp) *************** *** 634,649 **** t) (deffoo nnimap-request-article (article &optional group server to-buffer) ! (nnimap-request-article-part ! article "RFC822.PEEK" 'RFC822 group server to-buffer)) (deffoo nnimap-request-head (article &optional group server to-buffer) ! (nnimap-request-article-part ! article "RFC822.HEADER" 'RFC822.HEADER group server to-buffer)) (deffoo nnimap-request-body (article &optional group server to-buffer) ! (nnimap-request-article-part ! article "RFC822.TEXT.PEEK" 'RFC822.TEXT group server to-buffer)) (deffoo nnimap-request-group (group &optional server fast) (nnimap-request-update-info-internal --- 649,673 ---- t) (deffoo nnimap-request-article (article &optional group server to-buffer) ! (if (imap-capability 'IMAP4rev1 nnimap-server-buffer) ! (nnimap-request-article-part ! article "BODY.PEEK[]" 'BODYDETAIL group server to-buffer 'detail) ! (nnimap-request-article-part ! article "RFC822.PEEK" 'RFC822 group server to-buffer))) (deffoo nnimap-request-head (article &optional group server to-buffer) ! (if (imap-capability 'IMAP4rev1 nnimap-server-buffer) ! (nnimap-request-article-part ! article "BODY.PEEK[HEADER]" 'BODYDETAIL group server to-buffer 'detail) ! (nnimap-request-article-part ! article "RFC822.HEADER" 'RFC822.HEADER group server to-buffer))) (deffoo nnimap-request-body (article &optional group server to-buffer) ! (if (imap-capability 'IMAP4rev1 nnimap-server-buffer) ! (nnimap-request-article-part ! article "BODY.PEEK[TEXT]" 'BODYDETAIL group server to-buffer 'detail) ! (nnimap-request-article-part ! article "RFC822.TEXT.PEEK" 'RFC822.TEXT group server to-buffer))) (deffoo nnimap-request-group (group &optional server fast) (nnimap-request-update-info-internal *************** *** 889,895 **** ;; find split rule for this server / inbox (when (setq rule (nnimap-split-find-rule server inbox)) ;; iterate over articles ! (dolist (article (imap-search "UNSEEN UNDELETED")) (when (nnimap-request-head article) ;; copy article to right group(s) (setq removeorig nil) --- 913,919 ---- ;; find split rule for this server / inbox (when (setq rule (nnimap-split-find-rule server inbox)) ;; iterate over articles ! (dolist (article (imap-search nnimap-split-predicate)) (when (nnimap-request-head article) ;; copy article to right group(s) (setq removeorig nil) *** pub/pgnus/lisp/nnmail.el Wed Jan 5 17:09:50 2000 --- pgnus/lisp/nnmail.el Thu Apr 20 01:31:25 2000 *************** *** 1,5 **** ;;; nnmail.el --- mail support functions for the Gnus mail backends ! ;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail --- 1,5 ---- ;;; nnmail.el --- mail support functions for the Gnus mail backends ! ;; Copyright (C) 1995,96,97,98,99, 00 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news, mail *************** *** 468,499 **** ?. ?_)) (setq group (nnheader-translate-file-chars group)) ;; If this directory exists, we use it directly. ! (if (or nnmail-use-long-file-names ! (file-directory-p (concat dir group))) ! (concat dir group "/") ! ;; If not, we translate dots into slashes. ! (concat dir ! (mm-encode-coding-string ! (nnheader-replace-chars-in-string group ?. ?/) ! nnmail-pathname-coding-system) ! "/"))) (or file ""))) (defun nnmail-get-active () "Returns an assoc of group names and active ranges. nn*-request-list should have been called before calling this function." ! (let (group-assoc) ! ;; 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) ! ;; We create an alist with `(GROUP (LOW . HIGH))' elements. ! (push (list (match-string 1) ! (cons (string-to-int (match-string 3)) ! (string-to-int (match-string 2)))) ! group-assoc))) group-assoc)) (defvar nnmail-active-file-coding-system 'raw-text --- 468,517 ---- ?. ?_)) (setq group (nnheader-translate-file-chars group)) ;; If this directory exists, we use it directly. ! (file-name-as-directory ! (if (or nnmail-use-long-file-names ! (file-directory-p (concat dir group))) ! (expand-file-name group dir) ! ;; If not, we translate dots into slashes. ! (expand-file-name ! (mm-encode-coding-string ! (nnheader-replace-chars-in-string group ?. ?/) ! nnmail-pathname-coding-system) ! dir)))) (or file ""))) (defun nnmail-get-active () "Returns an assoc of group names and active ranges. nn*-request-list should have been called before calling this function." ! ;; Go through all groups from the active list. ! (save-excursion ! (set-buffer nntp-server-buffer) ! (nnmail-parse-active))) ! ! (defun nnmail-parse-active () ! "Parse the active file in the current buffer and return an alist." ! (goto-char (point-min)) ! (unless (re-search-forward "[\\\"]" nil t) ! (goto-char (point-max)) ! (while (re-search-backward "[][';?()#]" nil t) ! (insert ?\\))) ! (goto-char (point-min)) ! (let ((buffer (current-buffer)) ! group-assoc group max min) ! (while (not (eobp)) ! (condition-case err ! (progn ! (narrow-to-region (point) (gnus-point-at-eol)) ! (setq group (read buffer)) ! (unless (stringp group) ! (setq group (symbol-name group))) ! (if (and (numberp (setq max (read nntp-server-buffer))) ! (numberp (setq min (read nntp-server-buffer)))) ! (push (list group (cons min max)) ! group-assoc))) ! (error nil)) ! (widen) ! (forward-line 1)) group-assoc)) (defvar nnmail-active-file-coding-system 'raw-text *************** *** 511,518 **** (erase-buffer) (let (group) (while (setq group (pop alist)) ! (insert (format "%s %d %d y\n" (car group) (cdadr group) ! (caadr group)))))) (defun nnmail-get-split-group (file source) "Find out whether this FILE is to be split into GROUP only. --- 529,539 ---- (erase-buffer) (let (group) (while (setq group (pop alist)) ! (insert (format "%S %d %d y\n" (intern (car group)) (cdadr group) ! (caadr group)))) ! (goto-char (point-max)) ! (while (search-backward "\\." nil t) ! (delete-char 1)))) (defun nnmail-get-split-group (file source) "Find out whether this FILE is to be split into GROUP only. *************** *** 1066,1072 **** (goto-char (point-min)) (when (re-search-forward "^References:" nil t) (beginning-of-line) ! (insert "X-Gnus-Broken-Eudora-")))) (custom-add-option 'nnmail-prepare-incoming-header-hook 'nnmail-fix-eudora-headers) --- 1087,1096 ---- (goto-char (point-min)) (when (re-search-forward "^References:" nil t) (beginning-of-line) ! (insert "X-Gnus-Broken-Eudora-")) ! (goto-char (point-min)) ! (when (re-search-forward "^In-Reply-To:[^\n]+\\(\n[ \t]+\\)" nil t) ! (replace-match "" t t nil 1)))) (custom-add-option 'nnmail-prepare-incoming-header-hook 'nnmail-fix-eudora-headers) *************** *** 1577,1582 **** --- 1601,1608 ---- (unless nnmail-split-history (error "No current split history")) (with-output-to-temp-buffer "*nnmail split history*" + (with-current-buffer standard-output + (fundamental-mode)) ; for Emacs 20.4+ (let ((history nnmail-split-history) elem) (while (setq elem (pop history)) *** pub/pgnus/lisp/nnml.el Wed Jan 5 17:09:50 2000 --- pgnus/lisp/nnml.el Thu Apr 20 01:31:26 2000 *************** *** 41,51 **** "Spool directory for the nnml mail backend.") (defvoo nnml-active-file ! (concat (file-name-as-directory nnml-directory) "active") "Mail active file.") (defvoo nnml-newsgroups-file ! (concat (file-name-as-directory nnml-directory) "newsgroups") "Mail newsgroups description file.") (defvoo nnml-get-new-mail t --- 41,51 ---- "Spool directory for the nnml mail backend.") (defvoo nnml-active-file ! (expand-file-name "active" nnml-directory) "Mail active file.") (defvoo nnml-newsgroups-file ! (expand-file-name "newsgroups" nnml-directory) "Mail newsgroups description file.") (defvoo nnml-get-new-mail t *************** *** 372,379 **** (nnmail-write-region (point-min) (point-max) (or (nnml-article-to-file article) ! (concat nnml-current-directory ! (int-to-string article))) nil (if (nnheader-be-verbose 5) nil 'nomesg)) t) (setq headers (nnml-parse-head chars article)) --- 372,379 ---- (nnmail-write-region (point-min) (point-max) (or (nnml-article-to-file article) ! (expand-file-name (int-to-string article) ! nnml-current-directory)) nil (if (nnheader-be-verbose 5) nil 'nomesg)) t) (setq headers (nnml-parse-head chars article)) *************** *** 477,483 **** (nnml-update-file-alist) (let (file) (if (setq file (cdr (assq article nnml-article-file-alist))) ! (concat nnml-current-directory file) ;; Just to make sure nothing went wrong when reading over NFS -- ;; check once more. (when (file-exists-p --- 477,483 ---- (nnml-update-file-alist) (let (file) (if (setq file (cdr (assq article nnml-article-file-alist))) ! (expand-file-name file nnml-current-directory) ;; Just to make sure nothing went wrong when reading over NFS -- ;; check once more. (when (file-exists-p *************** *** 518,525 **** (defun nnml-find-id (group id) (erase-buffer) ! (let ((nov (concat (nnmail-group-pathname group nnml-directory) ! nnml-nov-file-name)) number found) (when (file-exists-p nov) (nnheader-insert-file-contents nov) --- 518,525 ---- (defun nnml-find-id (group id) (erase-buffer) ! (let ((nov (expand-file-name nnml-nov-file-name ! (nnmail-group-pathname group nnml-directory))) number found) (when (file-exists-p nov) (nnheader-insert-file-contents nov) *************** *** 539,545 **** (defun nnml-retrieve-headers-with-nov (articles &optional fetch-old) (if (or gnus-nov-is-evil nnml-nov-is-evil) nil ! (let ((nov (concat nnml-current-directory nnml-nov-file-name))) (when (file-exists-p nov) (save-excursion (set-buffer nntp-server-buffer) --- 539,545 ---- (defun nnml-retrieve-headers-with-nov (articles &optional fetch-old) (if (or gnus-nov-is-evil nnml-nov-is-evil) nil ! (let ((nov (expand-file-name nnml-nov-file-name nnml-current-directory))) (when (file-exists-p nov) (save-excursion (set-buffer nntp-server-buffer) *************** *** 635,642 **** (push (list group active) nnml-group-alist)) (setcdr active (1+ (cdr active))) (while (file-exists-p ! (concat (nnmail-group-pathname group nnml-directory) ! (int-to-string (cdr active)))) (setcdr active (1+ (cdr active)))) (cdr active))) --- 635,642 ---- (push (list group active) nnml-group-alist)) (setcdr active (1+ (cdr active))) (while (file-exists-p ! (expand-file-name (int-to-string (cdr active)) ! (nnmail-group-pathname group nnml-directory))) (setcdr active (1+ (cdr active)))) (cdr active))) *************** *** 676,683 **** (save-excursion (set-buffer buffer) (set (make-local-variable 'nnml-nov-buffer-file-name) ! (concat (nnmail-group-pathname group nnml-directory) ! nnml-nov-file-name)) (erase-buffer) (when (file-exists-p nnml-nov-buffer-file-name) (nnheader-insert-file-contents nnml-nov-buffer-file-name))) --- 676,684 ---- (save-excursion (set-buffer buffer) (set (make-local-variable 'nnml-nov-buffer-file-name) ! (expand-file-name ! nnml-nov-file-name ! (nnmail-group-pathname group nnml-directory))) (erase-buffer) (when (file-exists-p nnml-nov-buffer-file-name) (nnheader-insert-file-contents nnml-nov-buffer-file-name))) *** pub/pgnus/lisp/nnslashdot.el Wed Jan 5 17:09:50 2000 --- pgnus/lisp/nnslashdot.el Thu Apr 20 01:31:27 2000 *************** *** 377,387 **** (narrow-to-region (point) (search-forward "")) (goto-char (point-min)) (re-search-forward "\\([^<]+\\)") ! (setq description (nnweb-decode-entities-string (match-string 1))) (re-search-forward "\\([^<]+\\)") (setq sid (match-string 1)) ! (string-match "/\\([0-9/]+\\).shtml" sid) ! (setq sid (match-string 1 sid)) (re-search-forward "\\([^<]+\\)") (setq articles (string-to-number (match-string 1))) (setq gname (concat description " (" sid ")")) --- 377,388 ---- (narrow-to-region (point) (search-forward "")) (goto-char (point-min)) (re-search-forward "\\([^<]+\\)") ! (setq description ! (nnweb-decode-entities-string (match-string 1))) (re-search-forward "\\([^<]+\\)") (setq sid (match-string 1)) ! (string-match "/\\([0-9/]+\\)\\(.shtml\\|$\\)" sid) ! (setq sid (concat "00/" (match-string 1 sid))) (re-search-forward "\\([^<]+\\)") (setq articles (string-to-number (match-string 1))) (setq gname (concat description " (" sid ")")) *************** *** 397,405 **** (nnweb-insert (format nnslashdot-active-url number) t) (goto-char (point-min)) (while (re-search-forward ! "article.pl\\?sid=\\([^&]+\\).*\\([^<]+\\)" nil t) (setq sid (match-string 1) ! description (nnweb-decode-entities-string (match-string 2))) (forward-line 1) (when (re-search-forward "\\([0-9]+\\)" nil t) (setq articles (string-to-number (match-string 1)))) --- 398,408 ---- (nnweb-insert (format nnslashdot-active-url number) t) (goto-char (point-min)) (while (re-search-forward ! "article.pl\\?sid=\\([^&]+\\).*\\([^<]+\\)" ! nil t) (setq sid (match-string 1) ! description ! (nnweb-decode-entities-string (match-string 2))) (forward-line 1) (when (re-search-forward "\\([0-9]+\\)" nil t) (setq articles (string-to-number (match-string 1)))) *** pub/pgnus/lisp/nntp.el Wed Jan 5 17:09:51 2000 --- pgnus/lisp/nntp.el Thu Apr 20 01:31:28 2000 *************** *** 1,5 **** ;;; nntp.el --- nntp access for Gnus ! ;;; Copyright (C) 1987-90,92-99 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news --- 1,6 ---- ;;; nntp.el --- nntp access for Gnus ! ;;; Copyright (C) 1987, 88, 89, 90, 92, 93, 94, 95, 96, 97, 98, 99 ! ;;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news *** pub/pgnus/lisp/nnultimate.el Wed Jan 5 17:09:51 2000 --- pgnus/lisp/nnultimate.el Thu Apr 20 01:31:29 2000 *************** *** 82,88 **** (while (and (setq article (car articles)) map) (while (and map ! (> article (caar map))) (pop map)) (when (setq mmap (car map)) (setq farticle -1) --- 82,89 ---- (while (and (setq article (car articles)) map) (while (and map ! (or (> article (caar map)) ! (< (cadar map) (caar map)))) (pop map)) (when (setq mmap (car map)) (setq farticle -1) *************** *** 124,130 **** "-" (number-to-string current-page) (match-string 0 href)))) (goto-char (point-min)) ! (setq contents (w3-parse-buffer (current-buffer))) (setq table (nnultimate-find-forum-table contents)) (setq string (mapconcat 'identity (nnweb-text table) "")) (when (string-match "topic is \\([0-9]\\) pages" string) --- 125,132 ---- "-" (number-to-string current-page) (match-string 0 href)))) (goto-char (point-min)) ! (setq contents ! (ignore-errors (w3-parse-buffer (current-buffer)))) (setq table (nnultimate-find-forum-table contents)) (setq string (mapconcat 'identity (nnweb-text table) "")) (when (string-match "topic is \\([0-9]\\) pages" string) *************** *** 337,361 **** (setq art (1+ (string-to-number (car artlist))))) (pop artlist)) (setq garticles art)) ! (string-match "/\\([0-9]+\\).html" href) ! (setq topic (string-to-number (match-string 1 href))) ! (if (setq tinfo (assq topic topics)) ! (progn ! (setq old-max (cadr tinfo)) ! (setcar (cdr tinfo) garticles)) ! (setq old-max 0) ! (push (list topic garticles subject href) topics) ! (setcar (nthcdr 4 entry) topics)) ! (when (not (= old-max garticles)) ! (setq inc (- garticles old-max)) ! (setq mapping (nconc mapping ! (list ! (list ! old-total (1- (incf old-total inc)) ! topic (1+ old-max))))) ! (incf old-max inc) ! (setcar (nthcdr 5 entry) mapping) ! (setcar (nthcdr 6 entry) old-total))))) (setcar (nthcdr 7 entry) current-time) (setcar (nthcdr 1 entry) (1- old-total)) (nnultimate-write-groups) --- 339,364 ---- (setq art (1+ (string-to-number (car artlist))))) (pop artlist)) (setq garticles art)) ! (when garticles ! (string-match "/\\([0-9]+\\).html" href) ! (setq topic (string-to-number (match-string 1 href))) ! (if (setq tinfo (assq topic topics)) ! (progn ! (setq old-max (cadr tinfo)) ! (setcar (cdr tinfo) garticles)) ! (setq old-max 0) ! (push (list topic garticles subject href) topics) ! (setcar (nthcdr 4 entry) topics)) ! (when (not (= old-max garticles)) ! (setq inc (- garticles old-max)) ! (setq mapping (nconc mapping ! (list ! (list ! old-total (1- (incf old-total inc)) ! topic (1+ old-max))))) ! (incf old-max inc) ! (setcar (nthcdr 5 entry) mapping) ! (setcar (nthcdr 6 entry) old-total)))))) (setcar (nthcdr 7 entry) current-time) (setcar (nthcdr 1 entry) (1- old-total)) (nnultimate-write-groups) *** pub/pgnus/lisp/nnwarchive.el Wed Jan 5 17:09:52 2000 --- pgnus/lisp/nnwarchive.el Thu Apr 20 01:31:30 2000 *************** *** 61,80 **** '((egroups (address . "www.egroups.com") (open-url ! "http://www.egroups.com/register?method=loginAction&email=%s&password=%s" nnwarchive-login nnwarchive-passwd) (list-url ! "http://www.egroups.com/UserGroupsPage?") (list-dissect . nnwarchive-egroups-list) (list-groups . nnwarchive-egroups-list-groups) (xover-url ! "http://www.egroups.com/group/%s/?fetchForward=1&start=%d" group aux) (xover-last-url ! "http://www.egroups.com/group/%s/?fetchForward=1" group) (xover-page-size . 13) (xover-dissect . nnwarchive-egroups-xover) (article-url ! "http://www.egroups.com/group/%s/%d.html?raw=1" group article) (article-dissect . nnwarchive-egroups-article) (authentication . t) (article-offset . 0) --- 61,80 ---- '((egroups (address . "www.egroups.com") (open-url ! "http://www.egroups.com/login.cgi?&login_email=%s&login_password=%s" nnwarchive-login nnwarchive-passwd) (list-url ! "http://www.egroups.com/mygroups") (list-dissect . nnwarchive-egroups-list) (list-groups . nnwarchive-egroups-list-groups) (xover-url ! "http://www.egroups.com/message/%s/%d" group aux) (xover-last-url ! "http://www.egroups.com/message/%s/" group) (xover-page-size . 13) (xover-dissect . nnwarchive-egroups-xover) (article-url ! "http://www.egroups.com/message/%s/%d?source=1" group article) (article-dissect . nnwarchive-egroups-article) (authentication . t) (article-offset . 0) *************** *** 287,317 **** t) (deffoo nnwarchive-open-server (server &optional defs connectionless) (nnwarchive-init server) ! (if (nnwarchive-server-opened server) ! t ! (nnoo-change-server 'nnwarchive server defs) ! (when nnwarchive-authentication ! (setq nnwarchive-login ! (or nnwarchive-login ! (read-string (format "Login at %s: " server) user-mail-address))) ! (setq nnwarchive-passwd ! (or nnwarchive-passwd ! (mail-source-read-passwd ! (format "Password for %s at %s: " ! nnwarchive-login server))))) ! (unless nnwarchive-groups ! (nnwarchive-read-groups)) ! (save-excursion ! (set-buffer nnwarchive-buffer) ! (erase-buffer) ! (if nnwarchive-open-url ! (nnwarchive-url nnwarchive-open-url)) ! (if nnwarchive-open-dissect ! (funcall nnwarchive-open-dissect))) ! t)) (nnoo-define-skeleton nnwarchive) --- 287,315 ---- t) (deffoo nnwarchive-open-server (server &optional defs connectionless) + (nnoo-change-server 'nnwarchive server defs) (nnwarchive-init server) ! (when nnwarchive-authentication ! (setq nnwarchive-login ! (or nnwarchive-login ! (read-string (format "Login at %s: " server) user-mail-address))) ! (setq nnwarchive-passwd ! (or nnwarchive-passwd ! (mail-source-read-passwd ! (format "Password for %s at %s: " ! nnwarchive-login server))))) ! (unless nnwarchive-groups ! (nnwarchive-read-groups)) ! (save-excursion ! (set-buffer nnwarchive-buffer) ! (erase-buffer) ! (if nnwarchive-open-url ! (nnwarchive-url nnwarchive-open-url)) ! (if nnwarchive-open-dissect ! (funcall nnwarchive-open-dissect))) ! t) (nnoo-define-skeleton nnwarchive) *************** *** 389,402 **** expr))) (defun nnwarchive-url (xurl) ! (let ((url-confirmation-func 'identity)) ! (cond ! ((eq (car xurl) 'post) ! (pop xurl) ! (nnwarchive-fetch-form (car xurl) (nnwarchive-eval (cdr xurl)))) ! (t ! (nnweb-insert (apply 'format (nnwarchive-eval xurl))))))) ! (defun nnwarchive-generate-active () (save-excursion (set-buffer nntp-server-buffer) --- 387,402 ---- expr))) (defun nnwarchive-url (xurl) ! (mm-with-unibyte-current-buffer ! (let ((url-confirmation-func 'identity) ! (url-cookie-multiple-line nil)) ! (cond ! ((eq (car xurl) 'post) ! (pop xurl) ! (nnwarchive-fetch-form (car xurl) (nnwarchive-eval (cdr xurl)))) ! (t ! (nnweb-insert (apply 'format (nnwarchive-eval xurl)))))))) ! (defun nnwarchive-generate-active () (save-excursion (set-buffer nntp-server-buffer) *************** *** 424,430 **** (erase-buffer) (nnwarchive-url nnwarchive-xover-last-url) (goto-char (point-min)) ! (when (re-search-forward "of \\([0-9]+\\)" nil t) (setq articles (string-to-number (match-string 1)))) (let ((elem (assoc group nnwarchive-groups))) (if elem --- 424,430 ---- (erase-buffer) (nnwarchive-url nnwarchive-xover-last-url) (goto-char (point-min)) ! (when (re-search-forward "of \\([0-9]+\\)[ \t\n\r]*" nil t) (setq articles (string-to-number (match-string 1)))) (let ((elem (assoc group nnwarchive-groups))) (if elem *************** *** 442,457 **** group description elem articles) (goto-char (point-min)) (while ! (re-search-forward ! "/group/\\([^/]+\\)/info\\.html[^>]+>[^>]+>[\040\t]*-[\040\t]*\\([^<]+\\)<" ! nil t) (setq group (match-string 1) description (match-string 2)) - (forward-line 1) - (when (re-search-forward ">\\([0-9]+\\)<" nil t) - (setq articles (string-to-number (match-string 1)))) (if (setq elem (assoc group nnwarchive-groups)) ! (setcar (cdr elem) articles) (push (list group articles description) nnwarchive-groups)))) t) --- 442,452 ---- group description elem articles) (goto-char (point-min)) (while ! (re-search-forward "href=\"/group/\\([^/\"\> ]+\\)" nil t) (setq group (match-string 1) description (match-string 2)) (if (setq elem (assoc group nnwarchive-groups)) ! (setcar (cdr elem) 0) (push (list group articles description) nnwarchive-groups)))) t) *************** *** 459,465 **** (let (article subject from date) (goto-char (point-min)) (while (re-search-forward ! "]+>\\([^<]+\\)<" nil t) (setq group (match-string 1) article (string-to-number (match-string 2)) --- 454,460 ---- (let (article subject from date) (goto-char (point-min)) (while (re-search-forward ! "]+>\\([^<]+\\)<" nil t) (setq group (match-string 1) article (string-to-number (match-string 2)) *** pub/pgnus/lisp/nnweb.el Wed Jan 5 17:09:52 2000 --- pgnus/lisp/nnweb.el Thu Apr 20 01:31:30 2000 *************** *** 722,728 **** (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+\\);" nil t) (replace-match (char-to-string (if (eq (aref (match-string 1) 0) ?\#) ! (string-to-number (substring (match-string 1) 1)) (or (cdr (assq (intern (match-string 1)) w3-html-entities)) ?#))) --- 722,731 ---- (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+\\);" nil t) (replace-match (char-to-string (if (eq (aref (match-string 1) 0) ?\#) ! (let ((c ! (string-to-number (substring ! (match-string 1) 1)))) ! (if (mm-char-or-char-int-p c) c 32)) (or (cdr (assq (intern (match-string 1)) w3-html-entities)) ?#))) *************** *** 754,767 **** (narrow-to-region (point) (point)) (url-insert-file-contents url) (goto-char (point-min)) ! (while (re-search-forward ! "HTTP-EQUIV=\"Refresh\"[^>]*URL=\\([^\"]+\\)\"" ! nil t) (let ((url (match-string 1))) (delete-region (point-min) (point-max)) ! (nnweb-insert url)) ! (goto-char (point-min))) ! (goto-char (point-max))) (url-insert-file-contents url)) (setq buffer-file-name name))) --- 757,767 ---- (narrow-to-region (point) (point)) (url-insert-file-contents url) (goto-char (point-min)) ! (when (re-search-forward ! "HTTP-EQUIV=\"Refresh\"[^>]*URL=\\([^\"]+\\)\"" nil t) (let ((url (match-string 1))) (delete-region (point-min) (point-max)) ! (nnweb-insert url t)))) (url-insert-file-contents url)) (setq buffer-file-name name))) *** pub/pgnus/lisp/parse-time.el Wed Jan 5 17:09:52 2000 --- pgnus/lisp/parse-time.el Thu Apr 20 01:31:31 2000 *************** *** 167,173 **** (= (length elt) 7) (= (aref elt 1) ?:))) [0 1] [2 4] [5 7]) ! ((5) (50 99) ,#'(lambda () (+ 1900 elt))) ((5) (0 49) ,#'(lambda () (+ 2000 elt)))) "(slots predicate extractor...)") --- 167,173 ---- (= (length elt) 7) (= (aref elt 1) ?:))) [0 1] [2 4] [5 7]) ! ((5) (50 110) ,#'(lambda () (+ 1900 elt))) ((5) (0 49) ,#'(lambda () (+ 2000 elt)))) "(slots predicate extractor...)") *** pub/pgnus/lisp/pop3.el Wed Jan 5 17:09:52 2000 --- pgnus/lisp/pop3.el Thu Apr 20 01:31:31 2000 *************** *** 1,9 **** ;;; pop3.el --- Post Office Protocol (RFC 1460) interface ! ;; Copyright (C) 1996-1999 Free Software Foundation, Inc. ;; Author: Richard L. Pieri ! ;; Keywords: mail, pop3 ;; Version: 1.3s ;; This file is part of GNU Emacs. --- 1,10 ---- ;;; pop3.el --- Post Office Protocol (RFC 1460) interface ! ;; Copyright (C) 1996, 97, 98, 1999 Free Software Foundation, Inc. ;; Author: Richard L. Pieri ! ;; Maintainer: FSF ! ;; Keywords: mail ;; Version: 1.3s ;; This file is part of GNU Emacs. *************** *** 35,41 **** ;;; Code: (require 'mail-utils) - (provide 'pop3) (defconst pop3-version "1.3s") --- 36,41 ---- *************** *** 60,65 **** --- 60,68 ---- "Timestamp returned when initially connected to the POP server. Used for APOP authentication.") + (defvar pop3-movemail-file-coding-system nil + "Coding system for the crashbox made by `pop3-movemail'.") + (defvar pop3-read-point nil) (defvar pop3-debug nil) *************** *** 71,78 **** (n 1) message-count (pop3-password pop3-password) - ;; use Unix line endings for crashbox - (coding-system-for-write 'binary) ) ;; for debugging only (if pop3-debug (switch-to-buffer (process-buffer process))) --- 74,79 ---- *************** *** 85,91 **** ((equal 'pass pop3-authentication-scheme) (pop3-user process pop3-maildrop) (pop3-pass process)) ! (t (error "Invalid POP3 authentication scheme."))) (setq message-count (car (pop3-stat process))) (unwind-protect (while (<= n message-count) --- 86,92 ---- ((equal 'pass pop3-authentication-scheme) (pop3-user process pop3-maildrop) (pop3-pass process)) ! (t (error "Invalid POP3 authentication scheme"))) (setq message-count (car (pop3-stat process))) (unwind-protect (while (<= n message-count) *************** *** 94,100 **** (pop3-retr process n crashbuf) (save-excursion (set-buffer crashbuf) ! (write-region (point-min) (point-max) crashbox t 'nomesg) (set-buffer (process-buffer process)) (while (> (buffer-size) 5000) (goto-char (point-min)) --- 95,102 ---- (pop3-retr process n crashbuf) (save-excursion (set-buffer crashbuf) ! (let ((coding-system-for-write pop3-movemail-file-coding-system)) ! (write-region (point-min) (point-max) crashbox t 'nomesg)) (set-buffer (process-buffer process)) (while (> (buffer-size) 5000) (goto-char (point-min)) *************** *** 109,158 **** ) t) - (defun pop3-get-message-count () - "Return the number of messages in the maildrop." - (let* ((process (pop3-open-server pop3-mailhost pop3-port)) - message-count - (pop3-password pop3-password) - ) - ;; for debugging only - (if pop3-debug (switch-to-buffer (process-buffer process))) - ;; query for password - (if (and pop3-password-required (not pop3-password)) - (setq pop3-password - (pop3-read-passwd (format "Password for %s: " pop3-maildrop)))) - (cond ((equal 'apop pop3-authentication-scheme) - (pop3-apop process pop3-maildrop)) - ((equal 'pass pop3-authentication-scheme) - (pop3-user process pop3-maildrop) - (pop3-pass process)) - (t (error "Invalid POP3 authentication scheme."))) - (setq message-count (car (pop3-stat process))) - (pop3-quit process) - message-count)) - (defun pop3-open-server (mailhost port) ! "Open TCP connection to MAILHOST. Returns the process associated with the connection." ! (let ((process-buffer ! (get-buffer-create (format "trace of POP session to %s" mailhost))) ! (process) ! (coding-system-for-read 'binary);; because FSF Emacs 20 and ! (coding-system-for-write 'binary);; XEmacs 20 & 21 are st00pid ! ) (save-excursion ! (set-buffer process-buffer) (erase-buffer) (setq pop3-read-point (point-min)) ! ) ! (setq process ! (open-network-stream "POP" process-buffer mailhost port)) ! (let ((response (pop3-read-response process t))) ! (setq pop3-timestamp ! (substring response (or (string-match "<" response) 0) ! (+ 1 (or (string-match ">" response) -1))))) ! process ! )) ;; Support functions --- 111,133 ---- ) t) (defun pop3-open-server (mailhost port) ! "Open TCP connection to MAILHOST on PORT. Returns the process associated with the connection." ! (let ((coding-system-for-read 'binary) ! (coding-system-for-write 'binary) ! process) (save-excursion ! (set-buffer (get-buffer-create (concat " trace of POP session to %s" ! mailhost))) (erase-buffer) (setq pop3-read-point (point-min)) ! (setq process (open-network-stream "POP"(current-buffer) mailhost port)) ! (let ((response (pop3-read-response process t))) ! (setq pop3-timestamp ! (substring response (or (string-match "<" response) 0) ! (+ 1 (or (string-match ">" response) -1))))) ! process))) ;; Support functions *************** *** 163,177 **** (insert output))) (defun pop3-send-command (process command) ! (set-buffer (process-buffer process)) ! (goto-char (point-max)) ! ;; (if (= (aref command 0) ?P) ! ;; (insert "PASS \r\n") ! ;; (insert command "\r\n")) ! (setq pop3-read-point (point)) ! (goto-char (point-max)) ! (process-send-string process (concat command "\r\n")) ! ) (defun pop3-read-response (process &optional return) "Read the response from the server. --- 138,152 ---- (insert output))) (defun pop3-send-command (process command) ! (set-buffer (process-buffer process)) ! (goto-char (point-max)) ! ;; (if (= (aref command 0) ?P) ! ;; (insert "PASS \r\n") ! ;; (insert command "\r\n")) ! (setq pop3-read-point (point)) ! (goto-char (point-max)) ! (process-send-string process (concat command "\r\n")) ! ) (defun pop3-read-response (process &optional return) "Read the response from the server. *************** *** 187,193 **** (setq match-end (point)) (goto-char pop3-read-point) (if (looking-at "-ERR") ! (signal 'error (list (buffer-substring (point) (- match-end 2)))) (if (not (looking-at "+OK")) (progn (setq pop3-read-point match-end) nil) (setq pop3-read-point match-end) --- 162,168 ---- (setq match-end (point)) (goto-char pop3-read-point) (if (looking-at "-ERR") ! (error (buffer-substring (point) (- match-end 2))) (if (not (looking-at "+OK")) (progn (setq pop3-read-point match-end) nil) (setq pop3-read-point match-end) *************** *** 196,224 **** t) ))))) - (defun pop3-string-to-list (string &optional regexp) - "Chop up a string into a list." - (let ((list) - (regexp (or regexp " ")) - (string (if (string-match "\r" string) - (substring string 0 (match-beginning 0)) - string))) - (store-match-data nil) - (while string - (if (string-match regexp string) - (setq list (cons (substring string 0 (- (match-end 0) 1)) list) - string (substring string (match-end 0))) - (setq list (cons string list) - string nil))) - (nreverse list))) - (defvar pop3-read-passwd nil) (defun pop3-read-passwd (prompt) (if (not pop3-read-passwd) ! (if (load "passwd" t) (setq pop3-read-passwd 'read-passwd) ! (autoload 'ange-ftp-read-passwd "ange-ftp") ! (setq pop3-read-passwd 'ange-ftp-read-passwd))) (funcall pop3-read-passwd prompt)) (defun pop3-clean-region (start end) --- 171,185 ---- t) ))))) (defvar pop3-read-passwd nil) (defun pop3-read-passwd (prompt) (if (not pop3-read-passwd) ! (if (fboundp 'read-passwd) (setq pop3-read-passwd 'read-passwd) ! (if (load "passwd" t) ! (setq pop3-read-passwd 'read-passwd) ! (autoload 'ange-ftp-read-passwd "ange-ftp") ! (setq pop3-read-passwd 'ange-ftp-read-passwd)))) (funcall pop3-read-passwd prompt)) (defun pop3-clean-region (start end) *************** *** 245,252 **** (looking-at "BABYL OPTIONS:") ; Babyl )) (let ((from (mail-strip-quoted-names (mail-fetch-field "From"))) ! (date (pop3-string-to-list (or (mail-fetch-field "Date") ! (message-make-date)))) (From_)) ;; sample date formats I have seen ;; Date: Tue, 9 Jul 1996 09:04:21 -0400 (EDT) --- 206,214 ---- (looking-at "BABYL OPTIONS:") ; Babyl )) (let ((from (mail-strip-quoted-names (mail-fetch-field "From"))) ! (date (split-string (or (mail-fetch-field "Date") ! (message-make-date)) ! " ")) (From_)) ;; sample date formats I have seen ;; Date: Tue, 9 Jul 1996 09:04:21 -0400 (EDT) *************** *** 300,320 **** (defun pop3-apop (process user) "Send alternate authentication information to the server." ! (if (not (fboundp 'md5)) (autoload 'md5 "md5")) ! (let ((hash (md5 (concat pop3-timestamp pop3-password)))) ! (pop3-send-command process (format "APOP %s %s" user hash)) ! (let ((response (pop3-read-response process t))) ! (if (not (and response (string-match "+OK" response))) ! (pop3-quit process))))) ;; TRANSACTION STATE (defun pop3-stat (process) "Return the number of messages in the maildrop and the maildrop's size." (pop3-send-command process "STAT") (let ((response (pop3-read-response process t))) ! (list (string-to-int (nth 1 (pop3-string-to-list response))) ! (string-to-int (nth 2 (pop3-string-to-list response)))) )) (defun pop3-list (process &optional msg) --- 262,301 ---- (defun pop3-apop (process user) "Send alternate authentication information to the server." ! (let ((pass pop3-password)) ! (if (and pop3-password-required (not pass)) ! (setq pass ! (pop3-read-passwd (format "Password for %s: " pop3-maildrop)))) ! (if pass ! (let ((hash (pop3-md5 (concat pop3-timestamp pass)))) ! (pop3-send-command process (format "APOP %s %s" user hash)) ! (let ((response (pop3-read-response process t))) ! (if (not (and response (string-match "+OK" response))) ! (pop3-quit process))))) ! )) ;; TRANSACTION STATE + (defvar pop3-md5-program "md5" + "*Program to encode its input in MD5.") + + (defun pop3-md5 (string) + (with-temp-buffer + (insert string) + (call-process-region (point-min) (point-max) + (or shell-file-name "/bin/sh") + t (current-buffer) nil + "-c" pop3-md5-program) + ;; The meaningful output is the first 32 characters. + ;; Don't return the newline that follows them! + (buffer-substring (point-min) (+ (point-min) 32)))) + (defun pop3-stat (process) "Return the number of messages in the maildrop and the maildrop's size." (pop3-send-command process "STAT") (let ((response (pop3-read-response process t))) ! (list (string-to-int (nth 1 (split-string response " "))) ! (string-to-int (nth 2 (split-string response " ")))) )) (defun pop3-list (process &optional msg) *************** *** 341,356 **** ;; bill@att.com ;; condensed into: ;; (sometimes causes problems for really large messages.) ! ;; (if (> (buffer-size) 20000) (sleep-for (/ (buffer-size) 20000))) (goto-char start)) (setq pop3-read-point (point-marker)) ! ;; this code does not seem to work for some POP servers... ! ;; and I cannot figure out why not. ! ;; (goto-char (match-beginning 0)) ! ;; (backward-char 2) ! ;; (if (not (looking-at "\r\n")) ! ;; (insert "\r\n")) ! ;; (re-search-forward "\\.\r\n") (goto-char (match-beginning 0)) (setq end (point-marker)) (pop3-clean-region start end) --- 322,337 ---- ;; bill@att.com ;; condensed into: ;; (sometimes causes problems for really large messages.) ! ; (if (> (buffer-size) 20000) (sleep-for (/ (buffer-size) 20000))) (goto-char start)) (setq pop3-read-point (point-marker)) ! ;; this code does not seem to work for some POP servers... ! ;; and I cannot figure out why not. ! ; (goto-char (match-beginning 0)) ! ; (backward-char 2) ! ; (if (not (looking-at "\r\n")) ! ; (insert "\r\n")) ! ; (re-search-forward "\\.\r\n") (goto-char (match-beginning 0)) (setq end (point-marker)) (pop3-clean-region start end) *************** *** 376,382 **** "Return highest accessed message-id number for the session." (pop3-send-command process "LAST") (let ((response (pop3-read-response process t))) ! (string-to-int (nth 1 (pop3-string-to-list response))) )) (defun pop3-rset (process) --- 357,363 ---- "Return highest accessed message-id number for the session." (pop3-send-command process "LAST") (let ((response (pop3-read-response process t))) ! (string-to-int (nth 1 (split-string response " "))) )) (defun pop3-rset (process) *************** *** 477,479 **** --- 458,464 ---- ;; Restrictions: none ;; Possible responses: ;; +OK [TCP connection closed] + + (provide 'pop3) + + ;;; pop3.el ends here *** pub/pgnus/lisp/qp.el Wed Jan 5 17:09:52 2000 --- pgnus/lisp/qp.el Thu Apr 20 01:31:32 2000 *************** *** 23,68 **** ;;; Code: (defvar quoted-printable-encoding-characters (mapcar 'identity "0123456789ABCDEFabcdef")) ! (defun quoted-printable-decode-region (from to) ! "Decode quoted-printable in the region between FROM and TO." (interactive "r") (save-excursion ! (goto-char from) ! (while (search-forward "=" to t) ! (cond ! ;; End of the line. ! ((eq (char-after) ?\n) ! (delete-char -1) ! (delete-char 1)) ! ;; Encoded character. ! ((and ! (memq (char-after) quoted-printable-encoding-characters) ! (memq (char-after (1+ (point))) ! quoted-printable-encoding-characters)) ! (subst-char-in-region ! (1- (point)) (point) ?= ! (string-to-number ! (buffer-substring (point) (+ 2 (point))) ! 16)) ! (delete-char 2)) ! ;; Quoted equal sign. ! ((eq (char-after) ?=) ! (delete-char 1)) ! ;; End of buffer. ! ((eobp) ! (delete-char -1)) ! ;; Invalid. ! (t ! (message "Malformed MIME quoted-printable message")))))) ! (defun quoted-printable-decode-string (string) ! "Decode the quoted-printable-encoded STRING and return the results." (with-temp-buffer (insert string) ! (quoted-printable-decode-region (point-min) (point-max)) (buffer-string))) (defun quoted-printable-encode-region (from to &optional fold class) --- 23,85 ---- ;;; Code: + (require 'mm-util) + (defvar quoted-printable-encoding-characters (mapcar 'identity "0123456789ABCDEFabcdef")) ! (defun quoted-printable-decode-region (from to &optional charset) ! "Decode quoted-printable in the region between FROM and TO. ! If CHARSET is non-nil, decode the region with charset." (interactive "r") (save-excursion ! (save-restriction ! (let (start) ! (narrow-to-region from to) ! (goto-char from) ! (while (not (eobp)) ! (cond ! ((eq (char-after) ?=) ! (delete-char 1) ! (unless start ! (setq start (point))) ! (cond ! ;; End of the line. ! ((eq (char-after) ?\n) ! (delete-char 1)) ! ;; Encoded character. ! ((and ! (memq (char-after) quoted-printable-encoding-characters) ! (memq (char-after (1+ (point))) ! quoted-printable-encoding-characters)) ! (insert ! (string-to-number ! (buffer-substring (point) (+ 2 (point))) ! 16)) ! (delete-char 2)) ! ;; Quoted equal sign. ! ((eq (char-after) ?=) ! (forward-char 1)) ! ;; End of buffer. ! ((eobp)) ! ;; Invalid. ! (t ! (message "Malformed MIME quoted-printable message")))) ! ((and charset start (not (eq (mm-charset-after) 'ascii))) ! (mm-decode-coding-region start (point) charset) ! (setq start nil) ! (forward-char 1)) ! (t ! (forward-char 1)))) ! (if (and charset start) ! (mm-decode-coding-region start (point) charset)))))) ! (defun quoted-printable-decode-string (string &optional charset) ! "Decode the quoted-printable-encoded STRING and return the results. ! If CHARSET is non-nil, decode the region with charset." (with-temp-buffer (insert string) ! (quoted-printable-decode-region (point-min) (point-max) charset) (buffer-string))) (defun quoted-printable-encode-region (from to &optional fold class) *** pub/pgnus/lisp/rfc2047.el Wed Jan 5 17:09:53 2000 --- pgnus/lisp/rfc2047.el Thu Apr 20 01:31:33 2000 *************** *** 105,137 **** "Encode the message header according to `rfc2047-header-encoding-alist'. Should be called narrowed to the head of the message." (interactive "*") ! (when (featurep 'mule) ! (save-excursion ! (goto-char (point-min)) ! (let ((alist rfc2047-header-encoding-alist) ! elem method) ! (while (not (eobp)) ! (save-restriction ! (rfc2047-narrow-to-field) ! (when (rfc2047-encodable-p) ! ;; We found something that may perhaps be encoded. ! (while (setq elem (pop alist)) ! (when (or (and (stringp (car elem)) ! (looking-at (car elem))) ! (eq (car elem) t)) ! (setq alist nil ! method (cdr elem)))) ! (when method ! (cond ! ((eq method 'mime) ! (rfc2047-encode-region (point-min) (point-max)) ! (rfc2047-fold-region (point-min) (point-max))) ! ;; Hm. ! (t)))) ! (goto-char (point-max))))) ! (when mail-parse-charset ! (encode-coding-region (point-min) (point-max) ! mail-parse-charset))))) (defun rfc2047-encodable-p (&optional header) "Say whether the current (narrowed) buffer contains characters that need encoding in headers." --- 105,135 ---- "Encode the message header according to `rfc2047-header-encoding-alist'. Should be called narrowed to the head of the message." (interactive "*") ! (save-excursion ! (goto-char (point-min)) ! (let ((alist rfc2047-header-encoding-alist) ! elem method) ! (while (not (eobp)) ! (save-restriction ! (rfc2047-narrow-to-field) ! (when (rfc2047-encodable-p) ! ;; We found something that may perhaps be encoded. ! (while (setq elem (pop alist)) ! (when (or (and (stringp (car elem)) ! (looking-at (car elem))) ! (eq (car elem) t)) ! (setq alist nil ! method (cdr elem)))) ! (cond ! ((eq method 'mime) ! (rfc2047-encode-region (point-min) (point-max)) ! (rfc2047-fold-region (point-min) (point-max))) ! ;; Hm. ! (t))) ! (goto-char (point-max))))) ! (when mail-parse-charset ! (encode-coding-region ! (point-min) (point-max) mail-parse-charset)))) (defun rfc2047-encodable-p (&optional header) "Say whether the current (narrowed) buffer contains characters that need encoding in headers." *** pub/pgnus/lisp/time-date.el Wed Jan 20 01:52:16 1999 --- pgnus/lisp/time-date.el Thu Apr 20 01:31:33 2000 *************** *** 3,8 **** --- 3,10 ---- ;; Author: Lars Magne Ingebrigtsen ;; Masanobu Umeda + ;; Keywords: mail news util + ;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify *************** *** 26,31 **** --- 28,34 ---- (require 'parse-time) + ;;;###autoload (defun date-to-time (date) "Convert DATE into time." (condition-case () *************** *** 36,42 **** "Convert TIME to a floating point number." (+ (* (car time) 65536.0) (cadr time) ! (/ (or (caddr time) 0) 1000000.0))) (defun seconds-to-time (seconds) "Convert SECONDS (a floating point number) to an Emacs time structure." --- 39,45 ---- "Convert TIME to a floating point number." (+ (* (car time) 65536.0) (cadr time) ! (/ (or (nth 2 time) 0) 1000000.0))) (defun seconds-to-time (seconds) "Convert SECONDS (a floating point number) to an Emacs time structure." *************** *** 116,121 **** --- 119,125 ---- (- (/ (1- year) 100)) ; - century years (/ (1- year) 400)))) ; + Gregorian leap years + ;;;###autoload (defun safe-date-to-time (date) "Parse DATE and return a time structure. If DATE is malformed, a zero time will be returned." *** pub/pgnus/lisp/utf7.el Wed Jan 5 17:09:53 2000 --- pgnus/lisp/utf7.el Thu Apr 20 01:31:34 2000 *************** *** 1,7 **** ;;; utf7.el --- UTF-7 encoding/decoding for Emacs ;; Copyright (C) 1999 Free Software Foundation, Inc. ! ;; Author: Jon K Hellan ;; Keywords: mail ;; This file is part of GNU Emacs, but the same permissions apply --- 1,7 ---- ;;; utf7.el --- UTF-7 encoding/decoding for Emacs ;; Copyright (C) 1999 Free Software Foundation, Inc. ! ;; Author: Jon K Hellan ;; Keywords: mail ;; This file is part of GNU Emacs, but the same permissions apply *** pub/pgnus/lisp/webmail.el Wed Jan 5 17:09:53 2000 --- pgnus/lisp/webmail.el Thu Apr 20 01:31:34 2000 *************** *** 2,8 **** ;; Copyright (C) 1999 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ! ;; Keywords: hotmail yahoo netaddress my-deja ;; This file is part of GNU Emacs. --- 2,8 ---- ;; Copyright (C) 1999 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ! ;; Keywords: hotmail netaddress my-deja netscape ;; This file is part of GNU Emacs. *************** *** 77,83 **** (list-snarf . webmail-hotmail-list) (article-snarf . webmail-hotmail-article) (trash-url ! "%s&login=%s&f=33792&curmbox=ACTIVE&_lang=&js=&foo=inbox&page=&%s=on&Move+To.x=Move+To&tobox=trAsH" webmail-aux user id)) (yahoo (paranoid cookie post) --- 77,83 ---- (list-snarf . webmail-hotmail-list) (article-snarf . webmail-hotmail-article) (trash-url ! "%s&login=%s&f=33792&curmbox=ACTIVE&_lang=&foo=inbox&js=&page=&%s=on&_HMaction=MoveTo&tobox=trAsH&nullbox=" webmail-aux user id)) (yahoo (paranoid cookie post) *************** *** 111,120 **** --- 111,141 ---- "http://www.netaddress.com/tpl/Mail/%s/List?FolderID=-4&SortUseCase=True" webmail-session) (list-snarf . webmail-netaddress-list) + (article-url "http://www.netaddress.com/") (article-snarf . webmail-netaddress-article) (trash-url "http://www.netaddress.com/tpl/Message/%s/Move?FolderID=-4&Q=%s&N=&Sort=Date&F=-1" webmail-session id)) + (netscape + (paranoid cookie post agent) + (address . "webmail.netscape.com") + (open-url "http://ureg.netscape.com/iiop/UReg2/login/login?U2_LA=en&U2_BACK_FROM_CJ=true&U2_CS=iso-8859-1&U2_ENDURL=http://webmail.netscape.com/tpl/Subscribe/Step1&U2_NEW_ENDURL=http://webmail.netscape.com/tpl/Subscribe/Step1&U2_EXITURL=http://home.netscape.com/&U2_SOURCE=Webmail") + (open-snarf . webmail-netscape-open) + (login-url + content + ("http://ureg.netscape.com/iiop/UReg2/login/loginform") + "%s&U2_USERNAME=%s&U2_PASSWORD=%s" + webmail-aux user password) + (login-snarf . webmail-netaddress-login) + (list-url + "http://webmail.netscape.com/tpl/Mail/%s/List?FolderID=-4&SortUseCase=True" + webmail-session) + (list-snarf . webmail-netaddress-list) + (article-url "http://webmail.netscape.com/") + (article-snarf . webmail-netscape-article) + (trash-url + "http://webmail.netscape.com/tpl/Message/%s/Move?FolderID=-4&Q=%s&N=&Sort=Date&F=-1" + webmail-session id)) (my-deja (paranoid cookie post) (address . "www.my-deja.com") *************** *** 123,129 **** (login-url content ("%s" webmail-aux) ! "user=%s&pw=%s&autologout=60&go=" user password) (list-url "http://www.deja.com/rg_gotomail.xp") (list-snarf . webmail-my-deja-list) --- 144,150 ---- (login-url content ("%s" webmail-aux) ! "member_name=%s&pw=%s&go=&priv_opt_MyDeja99=" user password) (list-url "http://www.deja.com/rg_gotomail.xp") (list-snarf . webmail-my-deja-list) *************** *** 356,362 **** (defun webmail-hotmail-list () (let (site url newp) (goto-char (point-min)) ! (if (re-search-forward "[0-9]+ messages, [0-9]+ new" nil t) (message "Found %s" (match-string 0)) (webmail-error "maybe your w3 version is too old")) (goto-char (point-min)) --- 377,383 ---- (defun webmail-hotmail-list () (let (site url newp) (goto-char (point-min)) ! (if (re-search-forward "[0-9]+ new" nil t) (message "Found %s" (match-string 0)) (webmail-error "maybe your w3 version is too old")) (goto-char (point-min)) *************** *** 644,649 **** --- 665,676 ---- ;;; netaddress + (defun webmail-netscape-open () + (goto-char (point-min)) + (if (re-search-forward "login/hint\\?\\([^\"]+\\)\"" nil t) + (setq webmail-aux (match-string 1)) + (webmail-error "open@1"))) + (defun webmail-netaddress-open () (goto-char (point-min)) (if (re-search-forward "action=\"\\([^\"]+\\)\"" nil t) *************** *** 671,677 **** (setq item (cons id (format "%s/tpl/Message/%s/Read?Q=%s&FolderID=-4&SortUseCase=True&Sort=Date&Headers=True" ! (car webmail-open-url) webmail-session id))) (if (or (not webmail-newmail-only) (equal (match-string 1) "True")) --- 698,704 ---- (setq item (cons id (format "%s/tpl/Message/%s/Read?Q=%s&FolderID=-4&SortUseCase=True&Sort=Date&Headers=True" ! (car webmail-article-url) webmail-session id))) (if (or (not webmail-newmail-only) (equal (match-string 1) "True")) *************** *** 788,794 **** ;; Some blank line to seperate mails. (insert "\n\nFrom nobody " (current-time-string) "\n") (if id ! (insert (format "Message-ID: <%s@usa.net>\n" id))) (unless (looking-at "$") (if (search-forward "\n\n" nil t) (forward-line -1) --- 815,946 ---- ;; Some blank line to seperate mails. (insert "\n\nFrom nobody " (current-time-string) "\n") (if id ! (insert (format "Message-ID: <%s@%s>\n" id webmail-address))) ! (unless (looking-at "$") ! (if (search-forward "\n\n" nil t) ! (forward-line -1) ! (webmail-error "article@2"))) ! (when mime ! (narrow-to-region (point-min) (point)) ! (goto-char (point-min)) ! (while (not (eobp)) ! (if (looking-at "MIME-Version\\|Content-Type") ! (delete-region (point) ! (progn ! (forward-line 1) ! (if (re-search-forward "^[^ \t]" nil t) ! (goto-char (match-beginning 0)) ! (point-max)))) ! (forward-line 1))) ! (goto-char (point-max)) ! (widen) ! (narrow-to-region (point) (point-max)) ! (insert "MIME-Version: 1.0\n" ! (prog1 ! (mml-generate-mime) ! (delete-region (point-min) (point-max)))) ! (goto-char (point-min)) ! (widen)) ! (let (case-fold-search) ! (while (re-search-forward "^From " nil t) ! (beginning-of-line) ! (insert ">")))) ! (mm-append-to-file (point-min) (point-max) file))) ! ! (defun webmail-netscape-article (file id) ! (let (p p1 attachment count mime type) ! (save-restriction ! (webmail-encode-8bit) ! (goto-char (point-min)) ! (if (not (search-forward "Trash" nil t)) ! (webmail-error "article@1")) ! (if (not (search-forward "
" nil t)) ! (webmail-error "article@2")) ! (delete-region (point-min) (match-beginning 0)) ! (if (not (search-forward "
" nil t)) ! (webmail-error "article@3")) ! (narrow-to-region (point-min) (match-end 0)) ! (goto-char (point-min)) ! (while (re-search-forward "[\040\t\r\n]+" nil t) ! (replace-match " ")) ! (goto-char (point-min)) ! (while (re-search-forward "
]*>[^<]*" nil t) ! (replace-match "")) ! (goto-char (point-min)) ! (while (search-forward "" nil t) ! (replace-match "\n")) ! (nnweb-remove-markup) ! (nnweb-decode-entities) ! (goto-char (point-min)) ! (delete-blank-lines) ! (goto-char (point-min)) ! (while (re-search-forward "^\040+\\|\040+$" nil t) ! (replace-match "")) ! (goto-char (point-min)) ! (while (re-search-forward "\040+" nil t) ! (replace-match " ")) ! (goto-char (point-max)) ! (widen) ! (insert "\n\n") ! (setq p (point)) ! (unless (search-forward "" nil t) ! (webmail-error "article@4")) ! (forward-line 14) ! (delete-region p (point)) ! (goto-char (point-max)) ! (unless (re-search-backward ! "
" ! nil t 2) ! (setq mime t) ! (unless (search-forward "" nil t) ! (webmail-error "article@6")) ! (setq p1 (point)) ! (if (search-backward "" nil t) ! (webmail-error "article@8")) ! (delete-region p (point)) ! (let (bufname);; Attachment ! (save-excursion ! (set-buffer (generate-new-buffer " *webmail-att*")) ! (nnweb-insert (concat (car webmail-open-url) attachment)) ! (push (current-buffer) webmail-buffer-list) ! (setq bufname (buffer-name))) ! (insert "<#part type=" type) ! (insert " buffer=\"" bufname "\"") ! (insert " disposition=\"inline\"") ! (insert "><#/part>\n") ! (setq p (point)))) ! (delete-region p p1) ! (narrow-to-region ! p ! (if (search-forward ! "" ! nil t) ! (match-beginning 0) ! (point-max))) ! (webmail-netaddress-single-part) ! (goto-char (point-max)) ! (setq p (point)) ! (widen))) ! (unless mime ! (narrow-to-region p (point-max)) ! (setq mime (webmail-netaddress-single-part)) ! (widen)) ! (goto-char (point-min)) ! ;; Some blank line to seperate mails. ! (insert "\n\nFrom nobody " (current-time-string) "\n") ! (if id ! (insert (format "Message-ID: <%s@%s>\n" id webmail-address))) (unless (looking-at "$") (if (search-forward "\n\n" nil t) (forward-line -1) *************** *** 825,831 **** (defun webmail-my-deja-open () (webmail-refresh-redirect) (goto-char (point-min)) ! (if (re-search-forward "action=\"\\([^\"]+login_confirm\\.xp[^\"]+\\)\"" nil t) (setq webmail-aux (match-string 1)) (webmail-error "open@1"))) --- 977,983 ---- (defun webmail-my-deja-open () (webmail-refresh-redirect) (goto-char (point-min)) ! (if (re-search-forward "action=\"\\([^\"]+login_confirm\\.xp[^\"]*\\)\"" nil t) (setq webmail-aux (match-string 1)) (webmail-error "open@1"))) *** pub/pgnus/lisp/ChangeLog Wed Jan 5 17:09:35 2000 --- pgnus/lisp/ChangeLog Thu Apr 20 01:31:01 2000 *************** *** 1,3 **** --- 1,301 ---- + Thu Apr 20 01:39:25 2000 Lars Magne Ingebrigtsen + + * gnus.el: Pterodactyl Gnus v5.8.4 is released. + + 2000-04-19 Dave Love + + * mailcap.el (mailcap-parse-mimetypes): Add ...mime.types. + + 2000-04-18 12:28:24 Shenghuo ZHU + + * nnwarchive.el (nnwarchive-type-definition): New egroups html. + (nnwarchive-egroups-*): Ditto. + (nnwarchive-url): Unibyte buffer and single line cookie. + + 2000-04-14 18:50:04 Shenghuo ZHU + + * mm-util.el (mm-char-or-char-int-p): New alias. + * nnweb.el (nnweb-decode-entities): Check the validity of numeric + entities. + + 2000-04-10 Daiki Ueno + + * lisp/imap.el (imap-body-lines): Check Content-Type: of the + article case insensitively. + + 2000-04-10 20:35:46 Shenghuo ZHU + + * mail-source.el (mail-source-fetch-webmail): Use the default + password provided in mail-sources; use webmail:subtype:user as + the key. + + 2000-04-10 20:35:46 John Wiegley + + * mail-source.el (mail-source-fetch-webmail): Use + mail-source-password-cache. + + 2000-04-09 18:13:47 Shenghuo ZHU + + * webmail.el: Add netscape mail and fix HotMail mail. + + 2000-04-08 Simon Josefsson + + * imap.el (imap-kerberos4-open): Work with recent `imtest's. + + 2000-04-02 Simon Josefsson + + * nnimap.el (nnimap-request-article): Use BODY.PEEK[] instead of + RFC822.PEEK if server support IMAP4rev1. + (nnimap-request-body): Use BODY.PEEK[TEXT] instead of + RFC822.TEXT.PEEK if server support IMAP4rev1. + (nnimap-request-head): Use BODY.PEEK[HEADER] instead of + RFC822.HEADER if server support IMAP4rev1. + (nnimap-request-article-part): Support bodydetail in response + data. + + 2000-03-11 Simon Josefsson + + * fill-flowed.el: New file. + + * mm-decode.el (mm-dissect-singlepart): Create a MIME handle for + text/plain parts with `format' parameters. + + * mm-view.el (autoload): Autoload fill-flowed. + (mm-inline-text): For "plain" parts with a format=flowed + parameter, call `fill-flowed'. + + 2000-03-21 10:32:44 Lars Magne Ingebrigtsen + + * nnslashdot.el (nnslashdot-request-list): Fudge new-style + slashdot ids. + + 2000-03-20 00:12:42 Lars Magne Ingebrigtsen + + * nnslashdot.el (nnslashdot-request-list): Use the new slashdot + format. + + 2000-03-16 Simon Josefsson + + * imap.el: GSSAPI support, support kerberos 4 with Cyrus v1.6.x + `imtest' too. + (imap-kerberos4-program): Renamed from `imap-imtest-program'. + (imap-gssapi-program): New variable. + (imap-streams): Add gssapi. + (imap-stream-alist): Ditto. + (imap-authenticators): Ditto. + (imap-authenticator-alist): Ditto. + (imap-kerberos4-stream-p): Rename from `imap-kerberos4s-p'. + (imap-kerberos4-open): Loop over imtest programs, support Cyrus + 1.6.x `imtest' syntax. + (imap-gssapi-stream-p): New function. + (imap-gssapi-open): Ditto. + (imap-gssapi-auth-p): Ditto. + (imap-gssapi-auth): Ditto. + (imap-kerberos4-auth-p): Renamed from `imap-kerberos4a-p'. + (imap-send-command): Use buffer-local `imap-client-eol' value. + + * nnimap.el (nnimap-retrieve-headers-progress): Fold continuation + lines and turn TAB into SPC before parsing. + + 2000-03-15 Simon Josefsson + + * nnheader.el (nnheader-group-pathname): Make sure to return a + directory. + * nnmail.el (nnmail-group-pathname): Ditto. + + 2000-02-08 Per Abrahamsen + + * nnmail.el (nnmail-fix-eudora-headers): Fix `In-Reply-To' too, it + might split in the middle of a message-id. + + 2000-03-13 13:51:38 Lars Magne Ingebrigtsen + + * gnus-srvr.el (gnus-server-kill-server): Offer to kill all the + groups from the server. + + * gnus-sum.el (gnus-summary-save-parts): Fix interactive spec. + (gnus-summary-toggle-header): Update the wash status. + + * gnus-uu.el ((gnus-uu-extract-map "X" gnus-summary-mode-map)): + Moved here. + + * gnus-agent.el (gnus-agent-save-group-info): Respect old + setting. + + * nnmail.el (nnmail-get-active): Use it. + (nnmail-parse-active): New function. + + * mm-view.el (mm-inline-text): Support the new version of + vcard.el. + + * gnus-sum.el (gnus-summary-move-article): Only delete article + when moving junk. + (gnus-deaden-summary): Bury the buffer. + + * nnmail.el (nnmail-group-pathname): Ditto. + + * nnheader.el (nnheader-group-pathname): Use expand-file-name. + + 2000-03-13 20:23:06 Christoph Rohland + + * rfc2047.el (rfc2047-encode-message-header): Encode no matter + whether Mule. + + 2000-03-10 14:57:58 Lars Magne Ingebrigtsen + + * message.el (message-send-mail): Protect against unloaded Gnus. + + * gnus-topic.el (gnus-topic-update-topic-line): Don't update the + parent. + (gnus-topic-update-topic-line): Yes, do. + (gnus-topic-goto-missing-group): Tally the correct number of + unread articles before inserting the topic line. + + 2000-03-01 09:55:26 Lars Magne Ingebrigtsen + + * nnultimate.el (nnultimate-retrieve-headers): Ignore errors. + + 2000-02-13 13:53:08 Lars Magne Ingebrigtsen + + * mm-decode.el (mm-dissect-buffer): Ditto. + + * gnus-art.el (article-decode-charset): Strip CTE. + + * ietf-drums.el (ietf-drums-strip): New function. + + * gnus-sum.el (gnus-summary-move-article): Don't use the prefix + when prompting in read-only groups. + + 2000-02-23 Simon Josefsson + + * imap.el (imap-send-command): Change EOL-chars when + `imap-client-eol' differs from default, not only for kerberos4. + (imap-mailbox-status): Get encoded mailbox's status. + + 2000-02-19 Simon Josefsson + + * mail-source.el (mail-source-fetch-imap): Copy `imap-password' + into `mail-source-password-cache'. + + 2000-02-17 Florian Weimer + + * mm-util.el (mm-mime-charset): Check for presence of + `coding-system-get' and `get-charset-property' (recent XEmacs has + the former, but not the latter). + + 2000-01-28 Dave Love + + * message.el (message-check-news-header-syntax): Fix typo + `newsgroyps'. + (message-talkative-question): Put temp buffer in fundamental-mode. + (message-recover): Use fundamental-mode in the right buffer. + + * nnmail.el (nnmail-split-history): Use fundamental-mode in the + right buffer. + + 2000-01-26 12:01:18 Shenghuo ZHU + + * qp.el (quoted-printable-decode-region): Add charset parameter. + (quoted-printable-decode-string): Ditto. + + * gnus-art.el (article-de-quoted-unreadable): Use it. + + 2000-01-21 Simon Josefsson + + * nnimap.el (nnimap-split-predicate): New variable. + (nnimap-split-articles): Use it. + + 2000-01-20 Simon Josefsson + + * utf7.el: Change email address. + + 2000-01-18 22:03:51 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-catchup): Purge split history. + + 2000-01-14 02:43:55 Shenghuo ZHU + + * nnmail.el (nnmail-generate-active): Support extended group name. + (nnmail-get-active): Ditto. + + 2000-01-13 15:16:10 Shenghuo ZHU + + * gnus-agent.el (gnus-agent-write-active): Since no prefix in + group names, don't remove anything. + + 2000-01-13 15:10:53 Shenghuo ZHU + + * webmail.el (webmail-my-deja-open): My-deja changes. + + 2000-01-13 Simon Josefsson + + * nnimap.el (nnimap-retrieve-headers-progress): Create xref field. + + 2000-01-10 23:35:33 Shenghuo ZHU + + * gnus-agent.el (gnus-agent-fetch-headers): Translate full path. + + 2000-01-09 22:52:35 Shenghuo ZHU + + * gnus.el (gnus-other-frame): Fix typo. + + 1999-06-25 Andreas Jaeger + + * gnus-cus.el (gnus-group-customize): Fix typo. + + 2000-01-08 08:36:13 Lars Magne Ingebrigtsen + + * nnweb.el (nnweb-insert): Simplified. + + 2000-01-06 18:32:53 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-mode-map): "e" is + gnus-summary-edit-article. + + 2000-01-06 18:25:37 Jari Aalto + + * mailcap.el (mailcap-mime-extensions): Add .diff. + + 2000-01-06 00:06:40 Kim-Minh Kaplan + + * mm-decode.el (mm-mailcap-command): handle "%%" and the case where + there is no "%s" in the method. + + 2000-01-08 21:01:04 Kim-Minh Kaplan + + * gnus-sum.el (gnus-summary-select-article): Return 'old. + + 2000-01-06 13:41:11 Lars Magne Ingebrigtsen + + * nnfolder.el (nnfolder-read-folder): Use nnfolder-save-buffer. + + * gnus.el: Really always pop up a new frame. + + * parse-time.el (parse-time-rules): Allow 100-110 to be + 2000-2010. + + * time-date.el (date-to-time): Don't use timezone. + + 2000-01-06 Dave Love + + * time-date.el: Add keywords. + (date-to-time): Add autoload cookie. Canonicalize with + timezone-make-date-arpa-standard. + (time-to-seconds): Avoid caddr. + (safe-date-to-time): Add autoload cookie. + + * base64.el: Require cl when compiling. + + 2000-01-05 17:31:52 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-select-article): Return whether we + selected something new. + (gnus-summary-search-article): Start searching at the window + point. + + * gnus-group.el (gnus-fetch-group): Complete over + gnus-active-hashtb. + Wed Jan 5 17:06:41 2000 Lars Magne Ingebrigtsen * gnus.el: Pterodactyl Gnus v5.8.3 is released. *** pub/pgnus/texi/gnus.texi Wed Jan 5 17:09:56 2000 --- pgnus/texi/gnus.texi Thu Apr 20 01:31:39 2000 *************** *** 355,361 **** spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Gnus 5.8.3. @end ifinfo --- 355,361 ---- spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Gnus 5.8.4. @end ifinfo *************** *** 386,392 **** @end iftex - @menu * Starting Up:: Finding news can be a pain. * The Group Buffer:: Selecting, subscribing and killing groups. --- 386,391 ---- *************** *** 400,405 **** --- 399,863 ---- * Appendices:: Terminology, Emacs intro, FAQ, History, Internals. * Index:: Variable, function and concept index. * Key Index:: Key Index. + + @detailmenu + --- The Detailed Node Listing --- + + Starting Gnus + + * Finding the News:: Choosing a method for getting news. + * The First Time:: What does Gnus do the first time you start it? + * The Server is Down:: How can I read my mail then? + * Slave Gnusae:: You can have more than one Gnus active at a time. + * Fetching a Group:: Starting Gnus just to read a group. + * New Groups:: What is Gnus supposed to do with new groups? + * Startup Files:: Those pesky startup files---@file{.newsrc}. + * Auto Save:: Recovering from a crash. + * The Active File:: Reading the active file over a slow line Takes Time. + * Changing Servers:: You may want to move from one server to another. + * Startup Variables:: Other variables you might change. + + New Groups + + * Checking New Groups:: Determining what groups are new. + * Subscription Methods:: What Gnus should do with new groups. + * Filtering New Groups:: Making Gnus ignore certain new groups. + + The Group Buffer + + * Group Buffer Format:: Information listed and how you can change it. + * Group Maneuvering:: Commands for moving in the group buffer. + * Selecting a Group:: Actually reading news. + * Group Data:: Changing the info for a group. + * Subscription Commands:: Unsubscribing, killing, subscribing. + * Group Levels:: Levels? What are those, then? + * Group Score:: A mechanism for finding out what groups you like. + * Marking Groups:: You can mark groups for later processing. + * Foreign Groups:: Creating and editing groups. + * Group Parameters:: Each group may have different parameters set. + * Listing Groups:: Gnus can list various subsets of the groups. + * Sorting Groups:: Re-arrange the group order. + * Group Maintenance:: Maintaining a tidy @file{.newsrc} file. + * Browse Foreign Server:: You can browse a server. See what it has to offer. + * Exiting Gnus:: Stop reading news and get some work done. + * Group Topics:: A folding group mode divided into topics. + * Misc Group Stuff:: Other stuff that you can to do. + + Group Buffer Format + + * Group Line Specification:: Deciding how the group buffer is to look. + * Group Modeline Specification:: The group buffer modeline. + * Group Highlighting:: Having nice colors in the group buffer. + + Group Topics + + * Topic Variables:: How to customize the topics the Lisp Way. + * Topic Commands:: Interactive E-Z commands. + * Topic Sorting:: Sorting each topic individually. + * Topic Topology:: A map of the world. + * Topic Parameters:: Parameters that apply to all groups in a topic. + + Misc Group Stuff + + * Scanning New Messages:: Asking Gnus to see whether new messages have arrived. + * Group Information:: Information and help on groups and Gnus. + * Group Timestamp:: Making Gnus keep track of when you last read a group. + * File Commands:: Reading and writing the Gnus files. + + The Summary Buffer + + * Summary Buffer Format:: Deciding how the summary buffer is to look. + * Summary Maneuvering:: Moving around the summary buffer. + * Choosing Articles:: Reading articles. + * Paging the Article:: Scrolling the current article. + * Reply Followup and Post:: Posting articles. + * Marking Articles:: Marking articles as read, expirable, etc. + * Limiting:: You can limit the summary buffer. + * Threading:: How threads are made. + * Sorting:: How articles and threads are sorted. + * Asynchronous Fetching:: Gnus might be able to pre-fetch articles. + * Article Caching:: You may store articles in a cache. + * Persistent Articles:: Making articles expiry-resistant. + * Article Backlog:: Having already read articles hang around. + * Saving Articles:: Ways of customizing article saving. + * Decoding Articles:: Gnus can treat series of (uu)encoded articles. + * Article Treatment:: The article buffer can be mangled at will. + * MIME Commands:: Doing MIMEy things with the articles. + * Charsets:: Character set issues. + * Article Commands:: Doing various things with the article buffer. + * Summary Sorting:: Sorting the summary buffer in various ways. + * Finding the Parent:: No child support? Get the parent. + * Alternative Approaches:: Reading using non-default summaries. + * Tree Display:: A more visual display of threads. + * Mail Group Commands:: Some commands can only be used in mail groups. + * Various Summary Stuff:: What didn't fit anywhere else. + * Exiting the Summary Buffer:: Returning to the Group buffer. + * Crosspost Handling:: How crossposted articles are dealt with. + * Duplicate Suppression:: An alternative when crosspost handling fails. + + Summary Buffer Format + + * Summary Buffer Lines:: You can specify how summary lines should look. + * To From Newsgroups:: How to not display your own name. + * Summary Buffer Mode Line:: You can say how the mode line should look. + * Summary Highlighting:: Making the summary buffer all pretty and nice. + + Choosing Articles + + * Choosing Commands:: Commands for choosing articles. + * Choosing Variables:: Variables that influence these commands. + + Reply, Followup and Post + + * Summary Mail Commands:: Sending mail. + * Summary Post Commands:: Sending news. + * Summary Message Commands:: Other Message-related commands. + * Canceling and Superseding:: ``Whoops, I shouldn't have called him that.'' + + Marking Articles + + * Unread Articles:: Marks for unread articles. + * Read Articles:: Marks for read articles. + * Other Marks:: Marks that do not affect readedness. + + Marking Articles + + * Setting Marks:: How to set and remove marks. + * Generic Marking Commands:: How to customize the marking. + * Setting Process Marks:: How to mark articles for later processing. + + Threading + + * Customizing Threading:: Variables you can change to affect the threading. + * Thread Commands:: Thread based commands in the summary buffer. + + Customizing Threading + + * Loose Threads:: How Gnus gathers loose threads into bigger threads. + * Filling In Threads:: Making the threads displayed look fuller. + * More Threading:: Even more variables for fiddling with threads. + * Low-Level Threading:: You thought it was over... but you were wrong! + + Decoding Articles + + * Uuencoded Articles:: Uudecode articles. + * Shell Archives:: Unshar articles. + * PostScript Files:: Split PostScript. + * Other Files:: Plain save and binhex. + * Decoding Variables:: Variables for a happy decoding. + * Viewing Files:: You want to look at the result of the decoding? + + Decoding Variables + + * Rule Variables:: Variables that say how a file is to be viewed. + * Other Decode Variables:: Other decode variables. + * Uuencoding and Posting:: Variables for customizing uuencoding. + + Article Treatment + + * Article Highlighting:: You want to make the article look like fruit salad. + * Article Fontisizing:: Making emphasized text look nice. + * Article Hiding:: You also want to make certain info go away. + * Article Washing:: Lots of way-neat functions to make life better. + * Article Buttons:: Click on URLs, Message-IDs, addresses and the like. + * Article Date:: Grumble, UT! + * Article Signature:: What is a signature? + * Article Miscellania:: Various other stuff. + + Alternative Approaches + + * Pick and Read:: First mark articles and then read them. + * Binary Groups:: Auto-decode all articles. + + Various Summary Stuff + + * Summary Group Information:: Information oriented commands. + * Searching for Articles:: Multiple article commands. + * Summary Generation Commands:: (Re)generating the summary buffer. + * Really Various Summary Commands:: Those pesky non-conformant commands. + + The Article Buffer + + * Hiding Headers:: Deciding what headers should be displayed. + * Using MIME:: Pushing articles through @sc{mime} before reading them. + * Customizing Articles:: Tailoring the look of the articles. + * Article Keymap:: Keystrokes available in the article buffer. + * Misc Article:: Other stuff. + + Composing Messages + + * Mail:: Mailing and replying. + * Post:: Posting and following up. + * Posting Server:: What server should you post via? + * Mail and Post:: Mailing and posting at the same time. + * Archived Messages:: Where Gnus stores the messages you've sent. + * Posting Styles:: An easier way to specify who you are. + * Drafts:: Postponing messages and rejected messages. + * Rejected Articles:: What happens if the server doesn't like your article? + + Select Methods + + * The Server Buffer:: Making and editing virtual servers. + * Getting News:: Reading USENET news with Gnus. + * Getting Mail:: Reading your personal mail with Gnus. + * Browsing the Web:: Getting messages from a plethora of Web sources. + * Other Sources:: Reading directories, files, SOUP packets. + * Combined Groups:: Combining groups into one group. + * Gnus Unplugged:: Reading news and mail offline. + + The Server Buffer + + * Server Buffer Format:: You can customize the look of this buffer. + * Server Commands:: Commands to manipulate servers. + * Example Methods:: Examples server specifications. + * Creating a Virtual Server:: An example session. + * Server Variables:: Which variables to set. + * Servers and Methods:: You can use server names as select methods. + * Unavailable Servers:: Some servers you try to contact may be down. + + Getting News + + * NNTP:: Reading news from an @sc{nntp} server. + * News Spool:: Reading news from the local spool. + + Getting Mail + + * Mail in a Newsreader:: Important introductory notes. + * Getting Started Reading Mail:: A simple cookbook example. + * Splitting Mail:: How to create mail groups. + * Mail Sources:: How to tell Gnus where to get mail from. + * Mail Backend Variables:: Variables for customizing mail handling. + * Fancy Mail Splitting:: Gnus can do hairy splitting of incoming mail. + * Group Mail Splitting:: Use group customize to drive mail splitting. + * Incorporating Old Mail:: What about the old mail you have? + * Expiring Mail:: Getting rid of unwanted mail. + * Washing Mail:: Removing gruft from the mail you get. + * Duplicates:: Dealing with duplicated mail. + * Not Reading Mail:: Using mail backends for reading other files. + * Choosing a Mail Backend:: Gnus can read a variety of mail formats. + + Mail Sources + + * Mail Source Specifiers:: How to specify what a mail source is. + * Mail Source Customization:: Some variables that influence things. + * Fetching Mail:: Using the mail source specifiers. + + Choosing a Mail Backend + + * Unix Mail Box:: Using the (quite) standard Un*x mbox. + * Rmail Babyl:: Emacs programs use the rmail babyl format. + * Mail Spool:: Store your mail in a private spool? + * MH Spool:: An mhspool-like backend. + * Mail Folders:: Having one file for each group. + * Comparing Mail Backends:: An in-depth looks at pros and cons. + + Browsing the Web + + * Web Searches:: Creating groups from articles that match a string. + * Slashdot:: Reading the Slashdot comments. + * Ultimate:: The Ultimate Bulletin Board systems. + * Web Archive:: Reading mailing list archived on web. + + Other Sources + + * Directory Groups:: You can read a directory as if it was a newsgroup. + * Anything Groups:: Dired? Who needs dired? + * Document Groups:: Single files can be the basis of a group. + * SOUP:: Reading @sc{soup} packets ``offline''. + * Mail-To-News Gateways:: Posting articles via mail-to-news gateways. + * IMAP:: Using Gnus as a @sc{imap} client. + + Document Groups + + * Document Server Internals:: How to add your own document types. + + SOUP + + * SOUP Commands:: Commands for creating and sending @sc{soup} packets + * SOUP Groups:: A backend for reading @sc{soup} packets. + * SOUP Replies:: How to enable @code{nnsoup} to take over mail and news. + + @sc{imap} + + * Splitting in IMAP:: Splitting mail with nnimap. + * Editing IMAP ACLs:: Limiting/enabling other users access to a mailbox. + * Expunging mailboxes:: Equivalent of a "compress mailbox" button. + + Combined Groups + + * Virtual Groups:: Combining articles from many groups. + * Kibozed Groups:: Looking through parts of the newsfeed for articles. + + Gnus Unplugged + + * Agent Basics:: How it all is supposed to work. + * Agent Categories:: How to tell the Gnus Agent what to download. + * Agent Commands:: New commands for all the buffers. + * Agent Expiry:: How to make old articles go away. + * Outgoing Messages:: What happens when you post/mail something? + * Agent Variables:: Customizing is fun. + * Example Setup:: An example @file{.gnus.el} file for offline people. + * Batching Agents:: How to fetch news from a @code{cron} job. + * Agent Caveats:: What you think it'll do and what it does. + + Agent Categories + + * Category Syntax:: What a category looks like. + * The Category Buffer:: A buffer for maintaining categories. + * Category Variables:: Customize'r'Us. + + Agent Commands + + * Group Agent Commands:: + * Summary Agent Commands:: + * Server Agent Commands:: + + Scoring + + * Summary Score Commands:: Adding score entries for the current group. + * Group Score Commands:: General score commands. + * Score Variables:: Customize your scoring. (My, what terminology). + * Score File Format:: What a score file may contain. + * Score File Editing:: You can edit score files by hand as well. + * Adaptive Scoring:: Big Sister Gnus knows what you read. + * Home Score File:: How to say where new score entries are to go. + * Followups To Yourself:: Having Gnus notice when people answer you. + * Scoring Tips:: How to score effectively. + * Reverse Scoring:: That problem child of old is not problem. + * Global Score Files:: Earth-spanning, ear-splitting score files. + * Kill Files:: They are still here, but they can be ignored. + * Converting Kill Files:: Translating kill files to score files. + * GroupLens:: Getting predictions on what you like to read. + * Advanced Scoring:: Using logical expressions to build score rules. + * Score Decays:: It can be useful to let scores wither away. + + GroupLens + + * Using GroupLens:: How to make Gnus use GroupLens. + * Rating Articles:: Letting GroupLens know how you rate articles. + * Displaying Predictions:: Displaying predictions given by GroupLens. + * GroupLens Variables:: Customizing GroupLens. + + Advanced Scoring + + * Advanced Scoring Syntax:: A definition. + * Advanced Scoring Examples:: What they look like. + * Advanced Scoring Tips:: Getting the most out of it. + + Various + + * Process/Prefix:: A convention used by many treatment commands. + * Interactive:: Making Gnus ask you many questions. + * Symbolic Prefixes:: How to supply some Gnus functions with options. + * Formatting Variables:: You can specify what buffers should look like. + * Windows Configuration:: Configuring the Gnus buffer windows. + * Faces and Fonts:: How to change how faces look. + * Compilation:: How to speed Gnus up. + * Mode Lines:: Displaying information in the mode lines. + * Highlighting and Menus:: Making buffers look all nice and cozy. + * Buttons:: Get tendonitis in ten easy steps! + * Daemons:: Gnus can do things behind your back. + * NoCeM:: How to avoid spam and other fatty foods. + * Undo:: Some actions can be undone. + * Moderation:: What to do if you're a moderator. + * XEmacs Enhancements:: There are more pictures and stuff under XEmacs. + * Fuzzy Matching:: What's the big fuzz? + * Thwarting Email Spam:: A how-to on avoiding unsolicited commercial email. + * Various Various:: Things that are really various. + + Formatting Variables + + * Formatting Basics:: A formatting variable is basically a format string. + * Mode Line Formatting:: Some rules about mode line formatting variables. + * Advanced Formatting:: Modifying output in various ways. + * User-Defined Specs:: Having Gnus call your own functions. + * Formatting Fonts:: Making the formatting look colorful and nice. + + XEmacs Enhancements + + * Picons:: How to display pictures of what your reading. + * Smileys:: Show all those happy faces the way they were meant to be shown. + * Toolbar:: Click'n'drool. + * XVarious:: Other XEmacsy Gnusey variables. + + Picons + + * Picon Basics:: What are picons and How do I get them. + * Picon Requirements:: Don't go further if you aren't using XEmacs. + * Easy Picons:: Displaying Picons---the easy way. + * Hard Picons:: The way you should do it. You'll learn something. + * Picon Useless Configuration:: Other variables you can trash/tweak/munge/play with. + + Appendices + + * History:: How Gnus got where it is today. + * On Writing Manuals:: Why this is not a beginner's guide. + * Terminology:: We use really difficult, like, words here. + * Customization:: Tailoring Gnus to your needs. + * Troubleshooting:: What you might try if things do not work. + * Gnus Reference Guide:: Rilly, rilly technical stuff. + * Emacs for Heathens:: A short introduction to Emacsian terms. + * Frequently Asked Questions:: A question-and-answer session. + + History + + * Gnus Versions:: What Gnus versions have been released. + * Other Gnus Versions:: Other Gnus versions that also have been released. + * Why?:: What's the point of Gnus? + * Compatibility:: Just how compatible is Gnus with @sc{gnus}? + * Conformity:: Gnus tries to conform to all standards. + * Emacsen:: Gnus can be run on a few modern Emacsen. + * Gnus Development:: How Gnus is developed. + * Contributors:: Oodles of people. + * New Features:: Pointers to some of the new stuff in Gnus. + * Newest Features:: Features so new that they haven't been written yet. + + New Features + + * ding Gnus:: New things in Gnus 5.0/5.1, the first new Gnus. + * September Gnus:: The Thing Formally Known As Gnus 5.3/5.3. + * Red Gnus:: Third time best---Gnus 5.4/5.5. + * Quassia Gnus:: Two times two is four, or Gnus 5.6/5.7. + + Customization + + * Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere. + * Slow Terminal Connection:: You run a remote Emacs. + * Little Disk Space:: You feel that having large setup files is icky. + * Slow Machine:: You feel like buying a faster machine. + + Gnus Reference Guide + + * Gnus Utility Functions:: Common functions and variable to use. + * Backend Interface:: How Gnus communicates with the servers. + * Score File Syntax:: A BNF definition of the score file standard. + * Headers:: How Gnus stores headers internally. + * Ranges:: A handy format for storing mucho numbers. + * Group Info:: The group info format. + * Extended Interactive:: Symbolic prefixes and stuff. + * Emacs/XEmacs Code:: Gnus can be run under all modern Emacsen. + * Various File Formats:: Formats of files that Gnus use. + + Backend Interface + + * Required Backend Functions:: Functions that must be implemented. + * Optional Backend Functions:: Functions that need not be implemented. + * Error Messaging:: How to get messages and report errors. + * Writing New Backends:: Extending old backends. + * Hooking New Backends Into Gnus:: What has to be done on the Gnus end. + * Mail-like Backends:: Some tips on mail backends. + + Various File Formats + + * Active File Format:: Information on articles and groups available. + * Newsgroups File Format:: Group descriptions. + + Emacs for Heathens + + * Keystrokes:: Entering text and executing commands. + * Emacs Lisp:: The built-in Emacs programming language. + + @end detailmenu @end menu @node Starting Up *************** *** 1733,1738 **** --- 2191,2199 ---- handy if you want to read the most important groups before you read the rest. + If this variable is @code{best}, Gnus will make the next newsgroup the + one with the best level. + @vindex gnus-group-default-list-level All groups with a level less than or equal to @code{gnus-group-default-list-level} will be listed in the group buffer *************** *** 6599,6607 **** @kindex W W l (Summary) @findex gnus-article-hide-list-identifiers @vindex gnus-list-identifiers ! Hide list identifiers specified in @code{gnus-list-identifiers}. These ! are strings some list servers add to the beginning of all @code{Subject} ! headers---for example, @samp{[zebra 4711]}. @table @code --- 7060,7069 ---- @kindex W W l (Summary) @findex gnus-article-hide-list-identifiers @vindex gnus-list-identifiers ! Strip list identifiers specified in @code{gnus-list-identifiers}. ! These are strings some mailing list servers add to the beginning of ! all @code{Subject} headers---for example, @samp{[zebra 4711]}. Any ! leading @samp{Re: } is skipped before stripping. @table @code *************** *** 7338,7344 **** Parameters}). The default value is @code{(unknown-8bit)}, which is something some agents insist on having in there. ! @cindex Russina @cindex koi8-r @cindex koi8-u @cindex iso-8859-5 --- 7800,7830 ---- Parameters}). The default value is @code{(unknown-8bit)}, which is something some agents insist on having in there. ! @vindex gnus-group-posting-charset-alist ! When posting, @code{gnus-group-posting-charset-alist} is used to ! determine which charsets should not be encoded using the @sc{mime} ! encodings. For instance, some hierarchies discourage using ! quoted-printable header encoding. ! ! This variable is an alist of regexps and permitted unencoded charsets ! for posting. Each element of the alist has the form @code{(}@var{test ! header body-list}@code{)}, where: ! ! @table @var ! @item ! test ! is either a regular expression matching the newsgroup header or a ! variable to query, ! @item header ! is the charset which may be left unencoded in the header (@code{nil} ! means encode all charsets), ! @item body-list ! is a list of charsets which may be encoded using 8bit content-transfer ! encoding in the body, or one of the special values @code{nil} (always ! encode using quoted-printable) or @code{t} (always use 8bit). ! @end table ! ! @cindex Russian @cindex koi8-r @cindex koi8-u @cindex iso-8859-5 *************** *** 8222,8229 **** @end table @vindex gnus-exit-group-hook ! @code{gnus-exit-group-hook} is called when you exit the current ! group. @findex gnus-summary-wake-up-the-dead @findex gnus-dead-summary-mode --- 8708,8716 ---- @end table @vindex gnus-exit-group-hook ! @code{gnus-exit-group-hook} is called when you exit the current group ! with an ``updating'' exit. For instance @kbd{Q} ! (@code{gnus-summary-exit-no-update}) does not call this hook. @findex gnus-summary-wake-up-the-dead @findex gnus-dead-summary-mode *************** *** 8982,8987 **** --- 9469,9489 ---- (add-hook 'message-send-hook 'ispell-message) @end lisp + If you want to change the @code{ispell} dictionary based on what group + you're in, you could say something like the following: + + @lisp + (add-hook 'gnus-select-group-hook + (lambda () + (cond + ((string-match "^de\\." gnus-newsgroup-name) + (ispell-change-dictionary "deutsch")) + (t + (ispell-change-dictionary "english"))))) + @end lisp + + Modify to suit your needs. + @node Archived Messages @section Archived Messages *************** *** 9199,9205 **** (signature my-quote-randomizer)) ((message-news-p) (signature my-news-signature)) ! ((header "From.*To" "larsi.*org") (Organization "Somewhere, Inc.")) ((posting-from-work-p) (signature-file "~/.work-signature") --- 9701,9707 ---- (signature my-quote-randomizer)) ((message-news-p) (signature my-news-signature)) ! (header "From.*To" "larsi.*org" (Organization "Somewhere, Inc.")) ((posting-from-work-p) (signature-file "~/.work-signature") *************** *** 10656,10662 **** An example @sc{imap} mail source: @lisp ! (imap :server "mail.mycorp.com" :stream kerberos4) @end lisp @item webmail --- 11158,11164 ---- An example @sc{imap} mail source: @lisp ! (imap :server "mail.mycorp.com" :stream kerberos4 :fetchflag "\\Seen") @end lisp @item webmail *************** *** 11863,11870 **** --- 12365,12375 ---- * Slashdot:: Reading the Slashdot comments. * Ultimate:: The Ultimate Bulletin Board systems. * Web Archive:: Reading mailing list archived on web. + * Customizing w3:: Doing stuff to Emacs/w3 from Gnus. @end menu + All the web sources require Emacs/w3 and the url library to work. + The main caveat with all these web sources is that they probably won't work for a very long time. Gleaning information from the @sc{html} data is guesswork at best, and when the layout is altered, the Gnus backend *************** *** 12084,12089 **** --- 12589,12595 ---- @samp{~/News/ultimate/}. @end table + @node Web Archive @subsection Web Archive @cindex nnwarchive *************** *** 12120,12125 **** --- 12626,12663 ---- The password for your account on the web server. @end table + + @node Customizing w3 + @subsection Customizing w3 + @cindex w3 + @cindex html + @cindex url + @cindex Netscape + + Gnus uses the url library to fetch web pages and Emacs/w3 to display web + pages. Emacs/w3 is documented in its own manual, but there are some + things that may be more relevant for Gnus users. + + For instance, a common question is how to make Emacs/w3 follow links + using the @code{browse-url} functions (which will call some external web + browser like Netscape). Here's one way: + + @lisp + (eval-after-load "w3" + '(progn + (fset 'w3-fetch-orig (symbol-function 'w3-fetch)) + (defun w3-fetch (&optional url target) + (interactive (list (w3-read-url-with-default))) + (if (eq major-mode 'gnus-article-mode) + (browse-url url) + (w3-fetch-orig url target))))) + @end lisp + + Put that in your @file{.emacs} file, and hitting links in w3-rendered + @sc{html} in the Gnus article buffers will use @code{browse-url} to + follow the link. + + @node Other Sources @section Other Sources *************** *** 12851,12867 **** @item nnimap-stream @vindex nnimap-stream The type of stream used to connect to your server. By default, nnimap ! will use the most secure stream your server is capable of. @itemize @bullet @item ! @dfn{kerberos4:} Uses the `imtest' program. @item ! @dfn{ssl:} Uses OpenSSL or SSLeay. @item @dfn{network:} Plain, TCP/IP network connection. @end itemize @item nnimap-authenticator @vindex nnimap-authenticator --- 13389,13424 ---- @item nnimap-stream @vindex nnimap-stream The type of stream used to connect to your server. By default, nnimap ! will detect and automatically use all of the below, with the exception ! of SSL. (SSL is being replaced by STARTTLS, which can be automatically ! detected, but it's not widely deployed yet). @itemize @bullet @item ! @dfn{gssapi:} Connect with GSSAPI (usually kerberos 5). Require the ! @samp{imtest} program. @item ! @dfn{kerberos4:} Connect with kerberos 4. Require the @samp{imtest} program. ! @item ! @dfn{starttls:} Connect via the STARTTLS extension (similar to ! SSL). Require the external library @samp{starttls.el} and program ! @samp{starttls}. ! @item ! @dfn{ssl:} Connect through SSL. Require OpenSSL (the ! program @samp{openssl}) or SSLeay (@samp{s_client}). @item @dfn{network:} Plain, TCP/IP network connection. @end itemize + The @samp{imtest} program is shipped with Cyrus IMAPD, nnimap support + both @samp{imtest} version 1.5.x and version 1.6.x. + + For SSL connections, the OpenSSL program is available from + @file{http://www.openssl.org/}. OpenSSL was formerly known as SSLeay, + and nnimap support it too - altough the most recent versions of SSLeay, + 0.9.x, are known to have serious bugs making it useless. Earlier + versions, especially 0.8.x, of SSLeay are known to work. + @item nnimap-authenticator @vindex nnimap-authenticator *************** *** 12870,12876 **** @itemize @bullet @item ! @dfn{kerberos4:} Kerberos authentication. @item @dfn{cram-md5:} Encrypted username/password via CRAM-MD5. @item --- 13427,13440 ---- @itemize @bullet @item ! @dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Require ! external program @code{imtest}. ! @item ! @dfn{kerberos4:} Kerberos authentication. Require external program ! @code{imtest}. ! @item ! @dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Require ! external library @code{digest-md5.el}. @item @dfn{cram-md5:} Encrypted username/password via CRAM-MD5. @item *************** *** 13020,13025 **** --- 13584,13601 ---- Nnmail equivalent: @code{nnmail-split-methods}. + @item nnimap-split-predicate + @cindex splitting + @vindex nnimap-split-predicate + + Mail matching this predicate in @code{nnimap-split-inbox} will be + splitted, it is a string and the default is @samp{UNSEEN UNDELETED}. + + This might be useful if you use another @sc{imap} client to read mail in + your inbox but would like Gnus to split all articles in the inbox + regardless of readedness. Then you might change this to + @samp{UNDELETED}. + @item nnimap-split-fancy @cindex splitting, fancy @findex nnimap-split-fancy *************** *** 15855,15860 **** --- 16431,16442 ---- will mark the next three unread articles as read, no matter what the summary buffer looks like. Set @code{gnus-summary-goto-unread} to @code{nil} for a more straightforward action. + + Many commands do not use the process/prefix convention. All commands + that do explicitly say so in this manual. To apply the process/prefix + convention to commands that do not use it, you can use the @kbd{M-&} + command. For instance, to mark all the articles in the group as + expirable, you could say `M P b M-& E'. @node Interactive *** pub/pgnus/texi/message.texi Wed Jan 5 17:09:56 2000 --- pgnus/texi/message.texi Thu Apr 20 01:31:40 2000 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Pterodactyl Message 5.8.3 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Pterodactyl Pterodactyl Message 5.8.4 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 42,48 **** @tex @titlepage ! @title Pterodactyl Message 5.8.3 Manual @author by Lars Magne Ingebrigtsen @page --- 42,48 ---- @tex @titlepage ! @title Pterodactyl Pterodactyl Message 5.8.4 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 83,89 **** * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Pterodactyl Message 5.8.3. Message is distributed with the Gnus distribution bearing the same version number as this manual. --- 83,89 ---- * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Pterodactyl Pterodactyl Message 5.8.4. Message is distributed with the Gnus distribution bearing the same version number as this manual. *** pub/pgnus/aclocal.m4 Mon Jun 28 19:46:56 1999 --- pgnus/aclocal.m4 Thu Apr 20 01:31:40 2000 *************** *** 4,10 **** [# If set to t, that means we are running in a shell under Emacs. # If you have an Emacs named "t", then use the full path. test "$EMACS" = t && EMACS= ! AC_PATH_PROGS(EMACS, emacs xemacs, no) if test $EMACS != "no"; then AC_MSG_CHECKING([where .elc files should go]) dnl Set default value --- 4,10 ---- [# If set to t, that means we are running in a shell under Emacs. # If you have an Emacs named "t", then use the full path. test "$EMACS" = t && EMACS= ! test "$EMACS" || AC_PATH_PROGS(EMACS, emacs xemacs, no) if test $EMACS != "no"; then AC_MSG_CHECKING([where .elc files should go]) dnl Set default value *** pub/pgnus/texi/ChangeLog Wed Jan 5 17:09:56 2000 --- pgnus/texi/ChangeLog Thu Apr 20 01:31:41 2000 *************** *** 1,6 **** --- 1,44 ---- + 2000-03-19 Simon Josefsson + + * gnus.texi (IMAP): Addition. + + 2000-03-13 17:44:59 Lars Magne Ingebrigtsen + + * gnus.texi (Process/Prefix): Addition. + + 2000-02-04 Simon Josefsson + + * gnus.texi (IMAP): Fix. + + 2000-01-27 18:06:35 Lars Magne Ingebrigtsen + + * gnus.texi (Remember): Addition. + + 2000-01-21 Simon Josefsson + + * gnus.texi (Splitting in IMAP): Addition. + (Mail Source Specifiers): Add fetchflag setting in example. + + 2000-01-08 08:10:04 Martin Bialasinski + + * gnus.texi (Mail and Post): Example. + + 2000-01-08 07:46:13 Lars Magne Ingebrigtsen + + * gnus.texi (Customizing w3): New. + + 2000-01-08 07:46:06 Hamish Macdonald + + * gnus.texi (Customizing w3): Example. + + 2000-01-06 17:55:28 Lars Magne Ingebrigtsen + + * gnus.texi (Charsets): Addition. + 2000-01-05 15:58:48 Lars Magne Ingebrigtsen * gnus.texi (Mail Group Commands): Addition. + (Top): Added detailmenu. 2000-01-03 01:31:02 Lars Magne Ingebrigtsen *** pub/pgnus/GNUS-NEWS Wed Dec 1 17:31:03 1999 --- pgnus/GNUS-NEWS Thu Apr 20 01:31:42 2000 *************** *** 7,12 **** --- 7,28 ---- *** The mail-fetching functions have changed. See the manual for the many details. In particular, all procmail fetching variables are gone. + If you used procmail like in + + (setq nnmail-use-procmail t) + (setq nnmail-spool-file 'procmail) + (setq nnmail-procmail-directory "~/mail/incoming/") + (setq nnmail-procmail-suffix "\\.in") + + this now has changed to + + (setq mail-sources + '((directory :path "~/mail/incoming/" + :suffix ".in"))) + + More information is available in the info doc at Select Methods -> + Getting Mail -> Mail Sources + *** Gnus is now a MIME-capable reader. This affects many parts of Gnus, and adds a slew of new commands. See the manual for details.