+2000-10-08 TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+ * lisp/nnshimbun.el (nnshimbun-type-definition): Fix regular
+ expression to extract article body from `ZDNet'.
+
2000-10-06 Katsumi Yamaoka <yamaoka@jpl.org>
* lisp/imap.el: Require `base64' instead of to autoload it.
+2000-10-10 00:00:28 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * webmail.el (webmail-init): Use mm-disable-multibyte-mule4.
+
+2000-10-09 22:50:05 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * base64.el (base64-decode-region): Just give a message if the end
+ is not sane.
+
+2000-10-09 20:09:11 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * rfc2047.el (rfc2047-encode-message-header): Move fold into
+ encode-region.
+ (rfc2047-dissect-region): Rewrite.
+ (rfc2047-encode-region): Rewrite.
+ (rfc2047-fold-region): Fold any line longer than 76.
+ (rfc2047-unfold-region): New function.
+ (rfc2047-decode-region): Use it.
+ (rfc2047-q-encode-region): Don't break at bob.
+
+2000-10-09 17:12:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * nntp.el (nntp-open-connection): Kill process buffer when quit.
+ (nntp-connection-timeout): Add a note. SIGALRM is ignored in both
+ FSF Emacs 20 and XEmacs 21.
+ * gnus-agent.el (gnus-agent-fetch-session): Catch quit.
+
+2000-10-09 Dave Love <fx@gnu.org>
+
+ * gnus-audio.el: Don't require cl.
+ (gnus-audio): New custom group.
+ (gnus-audio-inline-sound): Change to work with Emacs.
+ (gnus-audio-directory, gnus-audio-directory)
+ (gnus-audio-au-player): Customize.
+ (gnus-audio-play): Try external player if play-sound-file fails.
+ Use file-name-extension, not string-match.
+
+ * gnus-art.el (article-de-quoted-unreadable)
+ (article-de-base64-unreadable): Fold search case rather than
+ downcasing string. Apply mm-charset-to-coding-system to arg of
+ quoted-printable-decode-region.
+ (gnus-article-dumbquotes-map): Fix dashes.
+ (gnus-button-mailto, gnus-button-embedded-url): Doc fix.
+ (gnus-button-reply): Just alias it.
+
+2000-10-09 Stefan Monnier <monnier@cs.yale.edu>
+
+ * mm-encode.el: Require CL. At least, for `incf'.
+
+ * nnfolder.el (nnfolder-ignore-active-file): Typos.
+
+ * gnus-mh.el (gnus-summary-save-in-folder): Obey mh-lib-progs.
+
+ * gnus-kill.el (gnus-kill): Typo.
+
+2000-10-09 Gerd Moellmann <gerd@gnu.org>
+
+ * smiley-ems.el (smiley-update-cache): Use `:ascent center'.
+
+2000-10-09 Simon Josefsson <simon@josefsson.org>
+
+ * nnimap.el (nnimap-group-overview-filename): Create directory for
+ newfile (when use long filenames is nil). Copy+delete file if
+ rename didn't work.
+ (nnimap-group-overview-filename): `rename-file' and `copy-file'
+ doesn't return anything useful, use ignore-errors instead.
+
+2000-10-08 13:05:11 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * dgnushack.el (dgnushack-compile): Delete old elc files first.
+
+2000-10-08 10:59:13 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-ems.el (gnus-kill-all-overlays): Move here.
+ * gnus-util.el (gnus-kill-all-overlays): Move out.
+ * gnus-sum.el (gnus-cache-write-active): Auto load.
+ * lpath.el: Shut up.
+ * nnweb.el (nnweb-url-retrieve-asynch): url-retrieve is
+ asynchronous in Exp version.
+
+2000-10-08 08:57:13 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-art.el, gnus-ems.el, gnus-start.el: Remove gnus-xemacs.
+ * gnus-ems.el: Autoload smiley.
+ * gnus-art.el (gnus-treat-display-smileys): Default value in Emacs 21.
+
+2000-10-08 08:45:48 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-sum.el (gnus-summary-display-article): Enable multibyte.
+ (gnus-summary-select-article): Don't enable multibyte here.
+ (gnus-summary-goto-article): Ditto.
+
+2000-10-08 Christoph Conrad <christoph.conrad@gmx.de>
+
+ * gnus-draft.el (gnus-draft-send-message): Typo.
+
+2000-10-08 Simon Josefsson <simon@josefsson.org>
+
+ * nnimap.el (nnimap-verify-uidvalidity): Delete overview file when
+ uid validity changes.
+ (nnimap-group-overview-filename): Store uidvalidity in filenames.
+ Rename old files into new format.
+
+2000-10-07 15:49:39 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * mm-util.el (mm-enable-multibyte-mule4): New.
+ (mm-disable-multibyte-mule4): New.
+ * gnus-sum.el (gnus-summary-mode): Use it.
+ (gnus-summary-select-article): Ditto.
+ (gnus-summary-goto-article): Use enable multibyte.
+ * rfc2047.el (rfc2047-decode): Use unibyte.
+
+2000-10-07 15:42:59 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-logic.el (gnus-advanced-string): Use "" if nil.
+
+2000-10-07 10:31:05 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * rfc2047.el (rfc2047-q-encode-region): Better calculation of
+ break point.
+ (rfc2047-fold-region): Don't break the first non-LWSP characters.
+
+2000-10-07 09:18:53 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus.el (gnus-agent-fetching): New variable.
+ * gnus-agent.el (gnus-agent-with-fetch): Bind it.
+ * gnus-score.el (gnus-score-body): Don't score body when
+ agent-fetching.
+ (gnus-score-followup): Don't score followup either.
+
+2000-10-07 08:19:17 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-art.el: Define dynamic variables in eval-when-compile.
+ * message.el (message-sending-message): New variable.
+ (message-send): Use it.
+ * gnus-draft.el (gnus-draft-send-message): Ditto.
+ (gnus-group-send-drafts): Ditto.
+
+2000-10-06 Dave Love <fx@gnu.org>
+
+ * gnus-audio.el: Don't require cl.
+ (gnus-audio): New custom group.
+ (gnus-audio-inline-sound): Change to work with Emacs.
+ (gnus-audio-directory, gnus-audio-directory)
+ (gnus-audio-au-player): Customize.
+ (gnus-audio-play): Try external player if play-sound-file fails.
+ Use file-name-extension, not string-match.
+
+2000-10-06 17:38:03 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-art.el (gnus-article-prepare): Configure it again.
+
+2000-10-06 15:11:07 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * message.el (message-default-charset): Default value for non-Mule
+ Emacsen.
+
+2000-10-06 14:28:50 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * message.el (message-alternative-emails): New.
+ (message-use-alternative-email-as-from): New.
+ (message-setup): Use them.
+
+2000-10-06 13:46:47 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * base64.el, dgnushack.el, gnus-spec.el, messagexmas.el
+ * gnus-xmas.el, nnheaderxm.el, nndraft.el: Use defalias.
+
+ * gnus-xmas.el (gnus-xmas-define): Defalias gnus-overlay-buffer,
+ gnus-overlay-start.
+ * gnus.el: Ditto.
+ * gnus-art.el (gnus-insert-mime-button): Use them.
+
+2000-10-06 10:01:08 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * mm-util.el (mm-with-unibyte-current-buffer): Don't set unibyte
+ if eight-bit-control is a charset, e.g. Mule 5.0 in Emacs 21.
+
+2000-10-06 09:38:54 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * qp.el (quoted-printable-encode-region): Use
+ mm-with-unibyte-current-buffer within narrowed region.
+
2000-10-06 08:56:33 ShengHuo ZHU <zsh@cs.rochester.edu>
* webmail.el (webmail-type-definition): Fix my-deja open url.
(mm-inline-message): Test for `remove-specifier'; don't use
condition-case.
->>>>>>> 5.672
2000-09-24 Simon Josefsson <simon@josefsson.org>
* nnimap.el (nnimap-request-accept-article): Remove From[^:] lines.
;; For non-MULE
(if (not (fboundp 'char-int))
- (fset 'char-int 'identity))
+ (defalias 'char-int 'identity))
(defvar base64-alphabet
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
(setq bits 0 counter 0))
(t (setq bits (lsh bits 6)))))))
(cond
- ((= (point) end)
- (if (not (zerop counter))
- (error "at least %d bits missing at end of base64 encoding"
- (* (- 4 counter) 6)))
- (setq done t))
- ((eq (char-after (point)) ?=)
+ ((or (= (point) end)
+ (eq (char-after (point)) ?=))
+ (if (and (= (point) end) (> counter 1))
+ (message
+ "at least %d bits missing at end of base64 encoding"
+ (* (- 4 counter) 6)))
(setq done t)
(cond ((= counter 1)
(error "at least 2 bits missing at end of base64 encoding"))
(buffer-string)
(kill-buffer (current-buffer)))))
-(fset 'base64-decode-string 'base64-decode)
-(fset 'base64-encode-string 'base64-encode)
+(defalias 'base64-decode-string 'base64-decode)
+(defalias 'base64-encode-string 'base64-encode)
);; (static-when nil ...
;;; Code:
;; Set coding priority of Shift-JIS to the bottom.
-(defvar *predefined-category*)
-(defvar coding-category-list)
(if (featurep 'xemacs)
- (fset 'set-coding-priority 'ignore)
- (fset 'coding-priority-list 'ignore)
- (fset 'set-coding-priority-list 'ignore))
+ (defalias 'set-coding-priority 'ignore)
+ (defalias 'coding-priority-list 'ignore)
+ (defalias 'set-coding-priority-list 'ignore))
(cond ((and (featurep 'xemacs) (featurep 'mule))
(if (memq 'shift-jis (coding-priority-list))
(set-coding-priority-list
(copy-sequence coding-category-list))
'(coding-category-sjis))))))
-(fset 'facep 'ignore)
+(defalias 'facep 'ignore)
(require 'cl)
(unless (fboundp 'si:byte-optimize-form-code-walker)
(byte-optimize-form nil);; Load `byte-opt' or `byte-optimize'.
(setq max-specpdl-size 3000)
- (fset 'si:byte-optimize-form-code-walker
- (symbol-function 'byte-optimize-form-code-walker))
+ (defalias 'si:byte-optimize-form-code-walker
+ (symbol-function 'byte-optimize-form-code-walker))
(defun byte-optimize-form-code-walker (form for-effect)
(if (and for-effect (memq (car-safe form) '(and or)))
;; Fix bug in and/or forms.
(defun byte-optimize-char-after (form)
(if (null (cdr form))
'(char-after (point))
- form))
- ))
+ form))))
(condition-case nil
(char-before)
(defun byte-optimize-char-before (form)
(if (null (cdr form))
'(char-before (point))
- form))
- ))
+ form))))
(push srcdir load-path)
:symbol-for-testing-whether-colon-keyword-is-available-or-not
(void-variable
;; Bind keywords.
- (mapcar (lambda (keyword) (set keyword keyword))
- '(:button-keymap :data :file :mime-handle))))
+ (dolist (keyword '(:button-keymap :data :file :mime-handle))
+ (set keyword keyword))))
;; Unknown variables and functions.
(unless (boundp 'buffer-file-coding-system)
(push \"~/lisp/custom\" load-path)
Modify to suit your needs."))
- (let ((files (directory-files srcdir nil "^[^=].*\\.el$"))
- ;;(byte-compile-generate-call-tree t)
- file elc)
- (mapcar
- (lambda (el) (setq files (delete el files)))
- (append
- dgnushack-tool-files
- (condition-case nil
- (progn (require 'w3-forms) nil)
- (error '("nnweb.el" "nnlistserv.el" "nnultimate.el"
- "nnslashdot.el" "nnwarchive.el" "webmail.el")))
- (condition-case nil
- (progn (require 'bbdb) nil)
- (error '("gnus-bbdb.el")))
- (unless (featurep 'xemacs)
- '("gnus-xmas.el" "gnus-picon.el" "messagexmas.el"
- "nnheaderxm.el" "smiley.el"))
- (when (or (featurep 'xemacs) (<= emacs-major-version 20))
- '("smiley-ems.el"))
- (when (and (fboundp 'md5) (subrp (symbol-function 'md5)))
- '("md5.el"))))
- (while (setq file (pop files))
+ (let ((files (directory-files srcdir nil "^[^=].*\\.el$")))
+ (dolist (file
+ (append
+ dgnushack-tool-files
+ (condition-case nil
+ (progn (require 'w3-forms) nil)
+ (error '("nnweb.el" "nnlistserv.el" "nnultimate.el"
+ "nnslashdot.el" "nnwarchive.el" "webmail.el")))
+ (condition-case nil
+ (progn (require 'bbdb) nil)
+ (error '("gnus-bbdb.el")))
+ (unless (featurep 'xemacs)
+ '("gnus-xmas.el" "gnus-picon.el" "messagexmas.el"
+ "nnheaderxm.el" "smiley.el"))
+ (when (or (featurep 'xemacs) (<= emacs-major-version 20))
+ '("smiley-ems.el"))
+ (when (and (fboundp 'md5) (subrp (symbol-function 'md5)))
+ '("md5.el"))))
+ (setq files (delete file files)))
+
+ (dolist (file files)
(setq file (expand-file-name file srcdir))
- (when (or (not (file-exists-p (setq elc (concat file "c"))))
- (file-newer-than-file-p file elc))
- (ignore-errors
- (byte-compile-file file))))))
+ (when (and (file-exists-p (setq elc (concat file "c")))
+ (file-newer-than-file-p file elc))
+ (delete-file elc)))
+
+ (let (;;(byte-compile-generate-call-tree t)
+ file elc)
+ (while (setq file (pop files))
+ (setq file (expand-file-name file srcdir))
+ (when (or (not (file-exists-p (setq elc (concat file "c"))))
+ (file-newer-than-file-p file elc))
+ (ignore-errors
+ (byte-compile-file file)))))))
(defun dgnushack-recompile ()
(require 'gnus)
(byte-recompile-directory "." 0))
\f
-;; Avoid byte-compile warnings.
-(defvar gnus-product-name)
-(defvar early-package-load-path)
-(defvar early-packages)
-(defvar last-package-load-path)
-(defvar last-packages)
-(defvar late-package-load-path)
-(defvar late-packages)
-
(defconst dgnushack-info-file-regexp
(concat "^\\(gnus\\|message\\|emacs-mime\\|gnus-ja\\|message-ja\\)"
"\\.info\\(-[0-9]+\\)?$"))
"^\\(gnus\\|message\\|emacs-mime\\|gnus-ja\\|message-ja\\)\\.texi$")
(defun dgnushack-make-package ()
- (require 'gnus)
- (let* ((product-name (downcase gnus-product-name))
- (lisp-dir (concat "lisp/" product-name "/"))
- make-backup-files)
-
+ (let (make-backup-files)
(message "Updating autoloads for directory %s..." default-directory)
(let ((generated-autoload-file "auto-autoloads.el")
noninteractive
(require 'cus-load)
(byte-compile-file "custom-load.el")
- (message "Generating MANIFEST.%s for the package..." product-name)
- (with-temp-buffer
- (insert "pkginfo/MANIFEST." product-name "\n")
- (mapcar
- (lambda (file)
- (unless (member file dgnushack-unexported-files)
- (insert lisp-dir file "\n")))
- (sort (directory-files "." nil "\\.elc?$") 'string-lessp))
- (mapcar
- (lambda (file) (insert "info/" file "\n"))
- (sort (directory-files "../texi/" nil dgnushack-info-file-regexp)
- 'string-lessp))
- (write-file (concat "../MANIFEST." product-name)))))
+ (require 'gnus)
+ (let ((product-name (downcase gnus-product-name)))
+ (message "Generating MANIFEST.%s for the package..." product-name)
+ (with-temp-buffer
+ (insert "pkginfo/MANIFEST." product-name "\n")
+ (let ((lisp-dir (concat "lisp/" product-name "/"))
+ (files (sort (directory-files "." nil "\\.elc?$") 'string-lessp))
+ file)
+ (while (setq file (pop files))
+ (unless (member file dgnushack-unexported-files)
+ (insert lisp-dir file "\n")))
+ (setq files (sort (directory-files "../texi/" nil
+ dgnushack-info-file-regexp)
+ 'string-lessp))
+ (while (setq file (pop files))
+ (insert lisp-dir file "\n")))
+ (write-file (concat "../MANIFEST." product-name))))))
(defun dgnushack-install-package ()
(let ((package-dir (car command-line-args-left))
- dirs info-dir pkginfo-dir product-name lisp-dir manifest files)
+ (product-name (progn (require 'gnus) (downcase gnus-product-name))))
+
+ ;; Examine PACKAGEDIR.
(unless package-dir
- (when (boundp 'early-packages)
- (setq dirs (delq nil (append (when early-package-load-path
- early-packages)
- (when late-package-load-path
- late-packages)
- (when last-package-load-path
- last-packages))))
- (while (and dirs (not package-dir))
- (when (file-exists-p (car dirs))
- (setq package-dir (car dirs)
- dirs (cdr dirs))))))
+ (let (dirs)
+ (when (boundp 'early-packages)
+ (setq dirs (delq nil (append (when early-package-load-path
+ early-packages)
+ (when late-package-load-path
+ late-packages)
+ (when last-package-load-path
+ last-packages))))
+ (while (and dirs (not package-dir))
+ (when (file-directory-p (car dirs))
+ (setq package-dir (car dirs)
+ dirs (cdr dirs)))))))
(unless package-dir
(error "%s" "
You must specify the name of the package path as follows:
-% make install-package PACKAGEDIR=/usr/local/lib/xemacs/xemacs-packages
-"
- ))
- (setq info-dir (expand-file-name "info/" package-dir)
- pkginfo-dir (expand-file-name "pkginfo/" package-dir))
- (require 'gnus)
- (setq product-name (downcase gnus-product-name)
- lisp-dir (expand-file-name (concat "lisp/" product-name "/")
- package-dir)
- manifest (concat "MANIFEST." product-name))
-
- (unless (file-directory-p lisp-dir)
- (make-directory lisp-dir t))
- (unless (file-directory-p info-dir)
- (make-directory info-dir))
- (unless (file-directory-p pkginfo-dir)
- (make-directory pkginfo-dir))
-
- (setq files (sort (directory-files "." nil "\\.elc?$") 'string-lessp))
- (mapcar (lambda (el) (setq files (delete el files)))
- dgnushack-unexported-files)
- (mapcar
- (lambda (file)
- (unless (or (member file files)
- (not (string-match "\\.elc?$" file)))
- (setq file (expand-file-name file lisp-dir))
- (message "Removing %s..." file)
- (condition-case nil
- (delete-file file)
- (error nil))))
- (directory-files lisp-dir nil nil nil t))
- (mapcar
- (lambda (file)
- (message "Copying %s to %s..." file lisp-dir)
- (copy-file file (expand-file-name file lisp-dir) t t))
- files)
-
- (mapcar
- (lambda (file)
- (message "Copying ../texi/%s to %s..." file info-dir)
- (copy-file (expand-file-name file "../texi/")
- (expand-file-name file info-dir)
- t t))
- (sort (directory-files "../texi/" nil dgnushack-info-file-regexp)
- 'string-lessp))
-
- (message "Copying ../%s to %s..." manifest pkginfo-dir)
- (copy-file (expand-file-name manifest "../")
- (expand-file-name manifest pkginfo-dir) t t)
-
+% make install-package PACKAGEDIR=/usr/local/lib/xemacs/xemacs-packages/"))
+
+ ;; Install lisp files.
+ (let ((lisp-dir (expand-file-name (concat "lisp/" product-name "/")
+ package-dir))
+ (files (sort (directory-files "." nil "\\.elc?$") 'string-lessp)))
+ (unless (file-directory-p lisp-dir)
+ (make-directory lisp-dir t))
+ (dolist (file dgnushack-unexported-files)
+ (setq files (delete file files)))
+ ;; Remove extra files.
+ (dolist (file (directory-files lisp-dir nil nil nil t))
+ (unless (or (member file files)
+ (not (string-match "\\.elc?$" file)))
+ (setq file (expand-file-name file lisp-dir))
+ (message "Removing %s..." file)
+ (condition-case nil
+ (delete-file file)
+ (error nil))))
+ (while (setq file (pop files))
+ (message "Copying %s to %s..." file lisp-dir)
+ (copy-file file (expand-file-name file lisp-dir) t t)))
+
+ ;; Install info files.
+ (let ((files (sort (directory-files "../texi/" nil
+ dgnushack-info-file-regexp)
+ 'string-lessp))
+ (info-dir (expand-file-name "info/" package-dir)))
+ (unless (file-directory-p info-dir)
+ (make-directory info-dir))
+ (while (setq file (pop files))
+ (message "Copying ../texi/%s to %s..." file info-dir)
+ (copy-file (expand-file-name file "../texi/")
+ (expand-file-name file info-dir)
+ t t)))
+
+ ;; Install pkginfo.
+ (let ((manifest (concat "MANIFEST." product-name))
+ (pkginfo-dir (expand-file-name "pkginfo/" package-dir)))
+ (unless (file-directory-p pkginfo-dir)
+ (make-directory pkginfo-dir))
+ (message "Copying ../%s to %s..." manifest pkginfo-dir)
+ (copy-file (expand-file-name manifest "../")
+ (expand-file-name manifest pkginfo-dir) t t))
(message "Done")))
(defun dgnushack-texi-add-suffix-and-format ()
(t
(setq files (cons file files)
command-line-args-left (cdr command-line-args-left)))))
- (while files
- (setq file (car files)
- files (cdr files))
+ (while (setq file (pop files))
(condition-case err
(progn
(if buffer-file-name (kill-buffer (current-buffer)))
(defmacro gnus-agent-with-fetch (&rest forms)
"Do FORMS safely."
`(unwind-protect
- (progn
+ (let ((gnus-agent-fetching t))
(gnus-agent-start-fetch)
,@forms)
(gnus-agent-stop-fetch)))
(error
(unless (funcall gnus-agent-confirmation-function
(format "Error (%s). Continue? " err))
- (error "Cannot fetch articles into the Gnus agent."))))
+ (error "Cannot fetch articles into the Gnus agent.")))
+ (quit
+ (unless (funcall gnus-agent-confirmation-function
+ (format "Quit (%s). Continue? " err))
+ (signal 'quit "Cannot fetch articles into the Gnus agent."))))
(pop methods))
(gnus-message 6 "Finished fetching articles into the Gnus agent"))))
((and (fboundp 'image-type-available-p)
(image-type-available-p 'xbm))
'gnus-article-display-xface)
- ((and (not gnus-xemacs)
+ ((and (not (featurep 'xemacs))
window-system
(module-installed-p 'x-face-mule))
'x-face-mule-gnus-article-display-x-face)
("\223" "``")
("\224" "\"")
("\225" "*")
- ("\226" "---")
- ("\227" "-")
+ ("\226" "-")
+ ("\227" "--")
("\231" "(TM)")
("\233" ">")
("\234" "oe")
(defcustom gnus-treat-display-xface
(and (or (and (fboundp 'image-type-available-p)
(image-type-available-p 'xbm))
- (and gnus-xemacs (featurep 'xface))
+ (and (featurep 'xemacs) (featurep 'xface))
(eq 'x-face-mule-gnus-article-display-x-face
gnus-article-x-face-command))
'head)
(put 'gnus-treat-display-xface 'highlight t)
(defcustom gnus-treat-display-smileys
- (if (or (and gnus-xemacs (featurep 'xpm))
- (and (not gnus-xemacs)
+ (if (or (and (featurep 'xemacs)
+ (featurep 'xpm))
+ (and (fboundp 'image-type-available-p)
+ (image-type-available-p 'pbm))
+ (and (not (featurep 'xemacs))
window-system
(module-installed-p 'gnus-bitmap)))
t
:type gnus-article-treat-custom)
(put 'gnus-treat-display-smileys 'highlight t)
-(defcustom gnus-treat-display-picons (if gnus-xemacs 'head nil)
+(defcustom gnus-treat-display-picons (if (featurep 'xemacs) 'head nil)
"Display picons.
Valid values are nil, t, `head', `last', an integer or a predicate.
See the manual for details."
(narrow-to-region header-start header-end)
(article-hide-headers)
;; Re-display X-Face image under XEmacs.
- (when (and gnus-xemacs
+ (when (and (featurep 'xemacs)
(gnus-functionp gnus-article-x-face-command))
(let ((func (cadr (assq 'gnus-treat-display-xface
gnus-treatment-function-alist)))
(unless charset
(setq charset gnus-newsgroup-charset))
(when (or force
- (and type (string-match "quoted-printable" (downcase type))))
+ (and type (let ((case-fold-search t))
+ (string-match "quoted-printable" type))))
(article-goto-body)
- (quoted-printable-decode-region (point) (point-max) charset)))))
+ (quoted-printable-decode-region
+ (point) (point-max) (mm-charset-to-coding-system charset))))))
(defun article-de-base64-unreadable (&optional force)
"Translate a base64 article.
(unless charset
(setq charset gnus-newsgroup-charset))
(when (or force
- (and type (string-match "base64" (downcase type))))
+ (and type (let ((case-fold-search t))
+ (string-match "base64" type))))
(article-goto-body)
(save-restriction
(narrow-to-region (point) (point-max))
(base64-decode-region (point-min) (point-max))
- (if (mm-coding-system-p charset)
- (mm-decode-coding-region (point-min) (point-max) charset)))))))
+ (mm-decode-coding-region
+ (point-min) (point-max) (mm-charset-to-coding-system charset)))))))
(eval-when-compile
(require 'rfc1843))
(gnus-set-mode-line 'article))
(article-goto-body)
(set-window-point (get-buffer-window (current-buffer)) (point))
+ (gnus-configure-windows 'article)
t))))))
(defun gnus-article-prepare-mime-display (&optional number)
gnus-summary-show-article-charset-alist))
(read-coding-system "Charset: ")))))
(forward-line 2)
- (mm-insert-inline handle (if charset
- (mm-decode-coding-string contents charset)
- contents))
+ (mm-insert-inline handle
+ (if charset
+ (mm-decode-coding-string
+ contents (mm-charset-to-coding-system charset))
+ contents))
(goto-char b))))
(defun gnus-mime-externalize-part (&optional handle)
;; window, overlay, position.
(if (mm-handle-displayed-p
(if overlay
- (with-current-buffer (overlay-buffer overlay)
- (widget-get (widget-at (overlay-start overlay))
+ (with-current-buffer (gnus-overlay-buffer overlay)
+ (widget-get (widget-at (gnus-overlay-start overlay))
:mime-handle))
(widget-get widget/window :mime-handle)))
"hide" "show")
(message-goto-subject)))))
(defun gnus-button-mailto (address)
- ;; Mail to ADDRESS.
+ "Mail to ADDRESS."
(set-buffer (gnus-copy-article-buffer))
- (gnus-setup-message 'reply
- (message-reply address)))
+ (message-reply address))
-(defun gnus-button-reply (address)
- ;; Reply to ADDRESS.
- (gnus-setup-message 'reply
- (message-reply address)))
+(defalias 'gnus-button-reply 'message-reply)
(defun gnus-button-embedded-url (address)
- "Browse ADDRESS."
+ "Activate ADDRESS with `browse-url'."
(browse-url (gnus-strip-whitespace address)))
(defun gnus-article-smiley-display ()
'mime-view-entity entity))))))
;; Dynamic variables.
-(defvar part-number)
-(defvar total-parts)
-(defvar type)
-(defvar condition)
-(defvar length)
+(eval-when-compile
+ (defvar part-number)
+ (defvar total-parts)
+ (defvar type)
+ (defvar condition)
+ (defvar length))
+
(defun gnus-treat-predicate (val)
(cond
((null val)
;;; gnus-audio.el --- Sound effects for Gnus
-;; Copyright (C) 1996 Free Software Foundation
+;; Copyright (C) 1996, 2000 Free Software Foundation
;; Author: Steven L. Baur <steve@miranova.com>
+;; Keywords: news, mail, multimedia
;; This file is part of GNU Emacs.
;; Boston, MA 02111-1307, USA.
;;; Commentary:
+
;; This file provides access to sound effects in Gnus.
-;; Prerelease: This file is partially stripped to support earcons.el
-;; You can safely ignore most of it until Red Gnus. **Evil Laugh**
+;; This file is partially stripped to support earcons.el.
+
;;; Code:
(require 'nnheader)
-(eval-when-compile (require 'cl))
-
-(defvar gnus-audio-inline-sound
- (and (fboundp 'device-sound-enabled-p)
- (device-sound-enabled-p))
- "When t, we will not spawn a subprocess to play sounds.")
-
-(defvar gnus-audio-directory (nnheader-find-etc-directory "sounds")
- "The directory containing the Sound Files.")
-(defvar gnus-audio-au-player "/usr/bin/showaudio"
- "Executable program for playing sun AU format sound files.")
+(defgroup gnus-audio nil
+ "Playing sound in Gnus."
+ :group 'gnus-visual
+ :group 'multimedia)
-(defvar gnus-audio-wav-player "/usr/local/bin/play"
- "Executable program for playing WAV files.")
+(defvar gnus-audio-inline-sound
+ (or (if (fboundp 'device-sound-enabled-p)
+ (device-sound-enabled-p)) ; XEmacs
+ (fboundp 'play-sound)) ; Emacs 21
+ "Non-nil means try to play sounds without using an external program.")
+
+(defcustom gnus-audio-directory (nnheader-find-etc-directory "sounds")
+ "The directory containing the Sound Files."
+ :type 'directory
+ :group 'gnus-audio)
+
+(defcustom gnus-audio-au-player "/usr/bin/showaudio"
+ "Executable program for playing sun AU format sound files."
+ :group 'gnus-audio
+ :type 'string)
+
+(defcustom gnus-audio-wav-player "/usr/local/bin/play"
+ "Executable program for playing WAV files."
+ :group 'gnus-audio
+ :type 'string)
;;; The following isn't implemented yet. Wait for Millennium Gnus.
;;(defvar gnus-audio-effects-enabled t
;;;###autoload
(defun gnus-audio-play (file)
- "Play a sound through the speaker."
+ "Play a sound FILE through the speaker."
(interactive)
(let ((sound-file (if (file-exists-p file)
file
- (concat gnus-audio-directory file))))
+ (expand-file-name file gnus-audio-directory))))
(when (file-exists-p sound-file)
- (if gnus-audio-inline-sound
- (play-sound-file sound-file)
- (cond ((string-match "\\.wav$" sound-file)
- (call-process gnus-audio-wav-player
- sound-file
- 0
- nil
- sound-file))
- ((string-match "\\.au$" sound-file)
- (call-process gnus-audio-au-player
- sound-file
- 0
- nil
- sound-file)))))))
+ (cond ((and gnus-audio-inline-sound
+ (condition-case nil
+ ;; Even if we have audio, we may fail with the
+ ;; wrong sort of sound file.
+ (progn (play-sound-file sound-file)
+ t)
+ (error nil))))
+ ;; If we don't have built-in sound, or playing it failed,
+ ;; try with external program.
+ ((equal "wav" (file-name-extension sound-file))
+ (call-process gnus-audio-wav-player
+ sound-file
+ 0
+ nil
+ sound-file))
+ ((equal "au" (file-name-extension sound-file))
+ (call-process gnus-audio-au-player
+ sound-file
+ 0
+ nil
+ sound-file))))))
;;; The following isn't implemented yet, wait for Red Gnus
(defun gnus-draft-send-message (&optional n)
"Send the current draft."
(interactive "P")
- (let ((articles (gnus-summary-work-articles n))
- article)
+ (let* ((articles (gnus-summary-work-articles n))
+ (total (length articles))
+ article)
(while (setq article (pop articles))
(gnus-summary-remove-process-mark article)
(unless (memq article gnus-newsgroup-unsendable)
- (gnus-draft-send article gnus-newsgroup-name t)
+ (let ((message-sending-message
+ (format "Sending message %d of %d..."
+ (- total (length articles)) total)))
+ (gnus-draft-send article gnus-newsgroup-name t))
(gnus-summary-mark-article article gnus-canceled-mark)))))
(defun gnus-draft-send (article &optional group interactive)
(cdr (assq 'unsend
(gnus-info-marks
(gnus-get-info "nndraft:queue"))))))
- (n (length articles))
- article i)
+ (total (length articles))
+ article)
(while (setq article (pop articles))
- (setq i (- n (length articles)))
- (message "Sending message %d of %d." i n)
- (if (memq article unsendable)
- (message "Message %d of %d is unsendable." i n)
- (gnus-draft-send article))))))
+ (unless (memq article unsendable)
+ (let ((message-sending-message
+ (format "Sending message %d of %d..."
+ (- total (length articles)) total)))
+ (gnus-draft-send article)))))))
;;; Utility functions
;;; Function aliases later to be redefined for XEmacs usage.
-(eval-and-compile
- (defvar gnus-xemacs (featurep 'xemacs)
- "Non-nil if running under XEmacs."))
-
(defvar gnus-mouse-2 [mouse-2])
(defvar gnus-down-mouse-3 [down-mouse-3])
(defvar gnus-down-mouse-2 [down-mouse-2])
(defvar gnus-widget-button-keymap nil)
(defvar gnus-mode-line-modified
- (if (or gnus-xemacs
+ (if (or (featurep 'xemacs)
(< emacs-major-version 20))
'("--**-" . "-----")
'("**" "--")))
(autoload 'gnus-xmas-redefine "gnus-xmas")
(autoload 'appt-select-lowest-window "appt"))
-(or (fboundp 'mail-file-babyl-p)
- (fset 'mail-file-babyl-p 'rmail-file-p))
-
-(when (and (not (featurep 'xemacs)) (>= emacs-major-version 21))
+(if (featurep 'xemacs)
+ (autoload 'gnus-smiley-display "smiley")
(autoload 'gnus-smiley-display "smiley-ems")) ; override XEmacs version
+(defun gnus-kill-all-overlays ()
+ "Delete all overlays in the current buffer."
+ (let* ((overlayss (overlay-lists))
+ (buffer-read-only nil)
+ (overlays (delq nil (nconc (car overlayss) (cdr overlayss)))))
+ (while overlays
+ (delete-overlay (pop overlays)))))
+
;;; Mule functions.
(eval-and-compile
- (if gnus-xemacs
+ (if (featurep 'xemacs)
(gnus-xmas-define)
(defvar gnus-mouse-face-prop 'mouse-face
"Property used for highlighting mouse regions.")))
(defun gnus-ems-redefine ()
(cond
- (gnus-xemacs
+ ((featurep 'xemacs)
(gnus-xmas-redefine))
((featurep 'mule)
(if (listp kill-list)
;; It is a list.
(if (not (consp (cdr kill-list)))
- ;; It's on the form (regexp . date).
+ ;; It's of the form (regexp . date).
(if (zerop (gnus-execute field (car kill-list)
command nil (not all)))
(when (> (days-between date (cdr kill-list))
(let* ((type (or type 's))
(case-fold-search (not (eq (downcase (symbol-name type))
(symbol-name type))))
- (header (aref gnus-advanced-headers index)))
+ (header (or (aref gnus-advanced-headers index) "")))
(cond
((memq type '(r R regexp Regexp))
(string-match match header))
t))))
(errbuf (gnus-get-buffer-create " *Gnus rcvstore*"))
;; Find the rcvstore program.
- (exec-path (if mh-lib (cons mh-lib exec-path) exec-path)))
+ (exec-path (cond
+ ((and (boundp 'mh-lib-progs) mh-lib-progs)
+ (cons mh-lib-progs exec-path))
+ (mh-lib (cons mh-lib exec-path))
+ (t exec-path))))
(with-current-buffer gnus-original-article-buffer
(save-restriction
(widen)
nil)
(defun gnus-score-body (scores header now expire &optional trace)
- (save-excursion
- (setq gnus-scores-articles
- (sort gnus-scores-articles
- (lambda (a1 a2)
- (< (mail-header-number (car a1))
- (mail-header-number (car a2))))))
- (set-buffer nntp-server-buffer)
- (save-restriction
- (let* ((buffer-read-only nil)
- (articles gnus-scores-articles)
- (all-scores scores)
- (request-func (cond ((string= "head" header)
- 'gnus-request-head)
- ((string= "body" header)
- 'gnus-request-body)
- (t 'gnus-request-article)))
- entries alist ofunc article last)
- (when articles
- (setq last (mail-header-number (caar (last articles))))
+ (if gnus-agent-fetching
+ nil
+ (save-excursion
+ (setq gnus-scores-articles
+ (sort gnus-scores-articles
+ (lambda (a1 a2)
+ (< (mail-header-number (car a1))
+ (mail-header-number (car a2))))))
+ (set-buffer nntp-server-buffer)
+ (save-restriction
+ (let* ((buffer-read-only nil)
+ (articles gnus-scores-articles)
+ (all-scores scores)
+ (request-func (cond ((string= "head" header)
+ 'gnus-request-head)
+ ((string= "body" header)
+ 'gnus-request-body)
+ (t 'gnus-request-article)))
+ entries alist ofunc article last)
+ (when articles
+ (setq last (mail-header-number (caar (last articles))))
;; Not all backends support partial fetching. In that case,
- ;; we just fetch the entire article.
- (unless (gnus-check-backend-function
- (and (string-match "^gnus-" (symbol-name request-func))
- (intern (substring (symbol-name request-func)
- (match-end 0))))
- gnus-newsgroup-name)
- (setq ofunc request-func)
- (setq request-func 'gnus-request-article))
- (while articles
- (setq article (mail-header-number (caar articles)))
- (gnus-message 7 "Scoring article %s of %s..." article last)
- (widen)
- (when (funcall request-func article gnus-newsgroup-name)
- (goto-char (point-min))
- ;; If just parts of the article is to be searched, but the
- ;; backend didn't support partial fetching, we just narrow
- ;; to the relevant parts.
- (when ofunc
- (if (eq ofunc 'gnus-request-head)
+ ;; we just fetch the entire article.
+ (unless (gnus-check-backend-function
+ (and (string-match "^gnus-" (symbol-name request-func))
+ (intern (substring (symbol-name request-func)
+ (match-end 0))))
+ gnus-newsgroup-name)
+ (setq ofunc request-func)
+ (setq request-func 'gnus-request-article))
+ (while articles
+ (setq article (mail-header-number (caar articles)))
+ (gnus-message 7 "Scoring article %s of %s..." article last)
+ (widen)
+ (when (funcall request-func article gnus-newsgroup-name)
+ (goto-char (point-min))
+ ;; If just parts of the article is to be searched, but the
+ ;; backend didn't support partial fetching, we just narrow
+ ;; to the relevant parts.
+ (when ofunc
+ (if (eq ofunc 'gnus-request-head)
+ (narrow-to-region
+ (point)
+ (or (search-forward "\n\n" nil t) (point-max)))
(narrow-to-region
- (point)
- (or (search-forward "\n\n" nil t) (point-max)))
- (narrow-to-region
- (or (search-forward "\n\n" nil t) (point))
- (point-max))))
- (setq scores all-scores)
- ;; Find matches.
- (while scores
- (setq alist (pop scores)
- entries (assoc header alist))
- (while (cdr entries) ;First entry is the header index.
- (let* ((rest (cdr entries))
- (kill (car rest))
- (match (nth 0 kill))
- (type (or (nth 3 kill) 's))
- (score (or (nth 1 kill)
- gnus-score-interactive-default-score))
- (date (nth 2 kill))
- (found nil)
- (case-fold-search
- (not (or (eq type 'R) (eq type 'S)
- (eq type 'Regexp) (eq type 'String))))
- (search-func
- (cond ((or (eq type 'r) (eq type 'R)
- (eq type 'regexp) (eq type 'Regexp))
- 're-search-forward)
- ((or (eq type 's) (eq type 'S)
- (eq type 'string) (eq type 'String))
- 'search-forward)
- (t
- (error "Invalid match type: %s" type)))))
- (goto-char (point-min))
- (when (funcall search-func match nil t)
- ;; Found a match, update scores.
- (setcdr (car articles) (+ score (cdar articles)))
- (setq found t)
- (when trace
- (push
- (cons (car-safe (rassq alist gnus-score-cache)) kill)
- gnus-score-trace)))
- ;; Update expire date
- (unless trace
- (cond
- ((null date)) ;Permanent entry.
- ((and found gnus-update-score-entry-dates)
- ;; Match, update date.
- (gnus-score-set 'touched '(t) alist)
- (setcar (nthcdr 2 kill) now))
- ((and expire (< date expire)) ;Old entry, remove.
- (gnus-score-set 'touched '(t) alist)
- (setcdr entries (cdr rest))
- (setq rest entries))))
- (setq entries rest)))))
- (setq articles (cdr articles)))))))
- nil)
+ (or (search-forward "\n\n" nil t) (point))
+ (point-max))))
+ (setq scores all-scores)
+ ;; Find matches.
+ (while scores
+ (setq alist (pop scores)
+ entries (assoc header alist))
+ (while (cdr entries) ;First entry is the header index.
+ (let* ((rest (cdr entries))
+ (kill (car rest))
+ (match (nth 0 kill))
+ (type (or (nth 3 kill) 's))
+ (score (or (nth 1 kill)
+ gnus-score-interactive-default-score))
+ (date (nth 2 kill))
+ (found nil)
+ (case-fold-search
+ (not (or (eq type 'R) (eq type 'S)
+ (eq type 'Regexp) (eq type 'String))))
+ (search-func
+ (cond ((or (eq type 'r) (eq type 'R)
+ (eq type 'regexp) (eq type 'Regexp))
+ 're-search-forward)
+ ((or (eq type 's) (eq type 'S)
+ (eq type 'string) (eq type 'String))
+ 'search-forward)
+ (t
+ (error "Invalid match type: %s" type)))))
+ (goto-char (point-min))
+ (when (funcall search-func match nil t)
+ ;; Found a match, update scores.
+ (setcdr (car articles) (+ score (cdar articles)))
+ (setq found t)
+ (when trace
+ (push
+ (cons (car-safe (rassq alist gnus-score-cache)) kill)
+ gnus-score-trace)))
+ ;; Update expire date
+ (unless trace
+ (cond
+ ((null date)) ;Permanent entry.
+ ((and found gnus-update-score-entry-dates)
+ ;; Match, update date.
+ (gnus-score-set 'touched '(t) alist)
+ (setcar (nthcdr 2 kill) now))
+ ((and expire (< date expire)) ;Old entry, remove.
+ (gnus-score-set 'touched '(t) alist)
+ (setcdr entries (cdr rest))
+ (setq rest entries))))
+ (setq entries rest)))))
+ (setq articles (cdr articles)))))))
+ nil))
(defun gnus-score-thread (scores header now expire &optional trace)
(gnus-score-followup scores header now expire trace t))
(defun gnus-score-followup (scores header now expire &optional trace thread)
- ;; Insert the unique article headers in the buffer.
- (let ((gnus-score-index (nth 1 (assoc header gnus-header-index)))
- (current-score-file gnus-current-score-file)
- (all-scores scores)
- ;; gnus-score-index is used as a free variable.
- alike last this art entries alist articles
- new news)
-
- ;; Change score file to the adaptive score file. All entries that
- ;; this function makes will be put into this file.
- (save-excursion
- (set-buffer gnus-summary-buffer)
- (gnus-score-load-file
- (or gnus-newsgroup-adaptive-score-file
- (gnus-score-file-name
- gnus-newsgroup-name gnus-adaptive-file-suffix))))
+ (if gnus-agent-fetching
+ ;; FIXME: It seems doable in fetching mode.
+ nil
+ ;; Insert the unique article headers in the buffer.
+ (let ((gnus-score-index (nth 1 (assoc header gnus-header-index)))
+ (current-score-file gnus-current-score-file)
+ (all-scores scores)
+ ;; gnus-score-index is used as a free variable.
+ alike last this art entries alist articles
+ new news)
+
+ ;; Change score file to the adaptive score file. All entries that
+ ;; this function makes will be put into this file.
+ (save-excursion
+ (set-buffer gnus-summary-buffer)
+ (gnus-score-load-file
+ (or gnus-newsgroup-adaptive-score-file
+ (gnus-score-file-name
+ gnus-newsgroup-name gnus-adaptive-file-suffix))))
- (setq gnus-scores-articles (sort gnus-scores-articles 'gnus-score-string<)
- articles gnus-scores-articles)
+ (setq gnus-scores-articles (sort gnus-scores-articles
+ 'gnus-score-string<)
+ articles gnus-scores-articles)
- (erase-buffer)
- (while articles
- (setq art (car articles)
- this (aref (car art) gnus-score-index)
- articles (cdr articles))
- (if (equal last this)
- (push art alike)
- (when last
- (insert last ?\n)
- (put-text-property (1- (point)) (point) 'articles alike))
- (setq alike (list art)
- last this)))
- (when last ; Bwadr, duplicate code.
- (insert last ?\n)
- (put-text-property (1- (point)) (point) 'articles alike))
-
- ;; Find matches.
- (while scores
- (setq alist (car scores)
- scores (cdr scores)
- entries (assoc header alist))
- (while (cdr entries) ;First entry is the header index.
- (let* ((rest (cdr entries))
- (kill (car rest))
- (match (nth 0 kill))
- (type (or (nth 3 kill) 's))
- (score (or (nth 1 kill) gnus-score-interactive-default-score))
- (date (nth 2 kill))
- (found nil)
- (mt (aref (symbol-name type) 0))
- (case-fold-search
- (not (or (= mt ?R) (= mt ?S) (= mt ?E) (= mt ?F))))
- (dmt (downcase mt))
- (search-func
- (cond ((= dmt ?r) 're-search-forward)
- ((or (= dmt ?e) (= dmt ?s) (= dmt ?f)) 'search-forward)
- (t (error "Invalid match type: %s" type))))
- arts art)
- (goto-char (point-min))
- (if (= dmt ?e)
+ (erase-buffer)
+ (while articles
+ (setq art (car articles)
+ this (aref (car art) gnus-score-index)
+ articles (cdr articles))
+ (if (equal last this)
+ (push art alike)
+ (when last
+ (insert last ?\n)
+ (put-text-property (1- (point)) (point) 'articles alike))
+ (setq alike (list art)
+ last this)))
+ (when last ; Bwadr, duplicate code.
+ (insert last ?\n)
+ (put-text-property (1- (point)) (point) 'articles alike))
+
+ ;; Find matches.
+ (while scores
+ (setq alist (car scores)
+ scores (cdr scores)
+ entries (assoc header alist))
+ (while (cdr entries) ;First entry is the header index.
+ (let* ((rest (cdr entries))
+ (kill (car rest))
+ (match (nth 0 kill))
+ (type (or (nth 3 kill) 's))
+ (score (or (nth 1 kill) gnus-score-interactive-default-score))
+ (date (nth 2 kill))
+ (found nil)
+ (mt (aref (symbol-name type) 0))
+ (case-fold-search
+ (not (or (= mt ?R) (= mt ?S) (= mt ?E) (= mt ?F))))
+ (dmt (downcase mt))
+ (search-func
+ (cond ((= dmt ?r) 're-search-forward)
+ ((or (= dmt ?e) (= dmt ?s) (= dmt ?f)) 'search-forward)
+ (t (error "Invalid match type: %s" type))))
+ arts art)
+ (goto-char (point-min))
+ (if (= dmt ?e)
+ (while (funcall search-func match nil t)
+ (and (= (progn (beginning-of-line) (point))
+ (match-beginning 0))
+ (= (progn (end-of-line) (point))
+ (match-end 0))
+ (progn
+ (setq found (setq arts (get-text-property
+ (point) 'articles)))
+ ;; Found a match, update scores.
+ (while arts
+ (setq art (car arts)
+ arts (cdr arts))
+ (gnus-score-add-followups
+ (car art) score all-scores thread))))
+ (end-of-line))
(while (funcall search-func match nil t)
- (and (= (progn (beginning-of-line) (point))
- (match-beginning 0))
- (= (progn (end-of-line) (point))
- (match-end 0))
- (progn
- (setq found (setq arts (get-text-property
- (point) 'articles)))
- ;; Found a match, update scores.
- (while arts
- (setq art (car arts)
- arts (cdr arts))
- (gnus-score-add-followups
- (car art) score all-scores thread))))
- (end-of-line))
- (while (funcall search-func match nil t)
- (end-of-line)
- (setq found (setq arts (get-text-property (point) 'articles)))
- ;; Found a match, update scores.
- (while (setq art (pop arts))
- (when (setq new (gnus-score-add-followups
- (car art) score all-scores thread))
- (push new news)))))
- ;; Update expire date
- (cond ((null date)) ;Permanent entry.
- ((and found gnus-update-score-entry-dates) ;Match, update date.
- (gnus-score-set 'touched '(t) alist)
- (setcar (nthcdr 2 kill) now))
- ((and expire (< date expire)) ;Old entry, remove.
- (gnus-score-set 'touched '(t) alist)
- (setcdr entries (cdr rest))
- (setq rest entries)))
- (setq entries rest))))
- ;; We change the score file back to the previous one.
- (save-excursion
- (set-buffer gnus-summary-buffer)
- (gnus-score-load-file current-score-file))
- (list (cons "references" news))))
+ (end-of-line)
+ (setq found (setq arts (get-text-property (point) 'articles)))
+ ;; Found a match, update scores.
+ (while (setq art (pop arts))
+ (when (setq new (gnus-score-add-followups
+ (car art) score all-scores thread))
+ (push new news)))))
+ ;; Update expire date
+ (cond ((null date)) ;Permanent entry.
+ ((and found gnus-update-score-entry-dates)
+ ;Match, update date.
+ (gnus-score-set 'touched '(t) alist)
+ (setcar (nthcdr 2 kill) now))
+ ((and expire (< date expire)) ;Old entry, remove.
+ (gnus-score-set 'touched '(t) alist)
+ (setcdr entries (cdr rest))
+ (setq rest entries)))
+ (setq entries rest))))
+ ;; We change the score file back to the previous one.
+ (save-excursion
+ (set-buffer gnus-summary-buffer)
+ (gnus-score-load-file current-score-file))
+ (list (cons "references" news)))))
(defun gnus-score-add-followups (header score scores &optional thread)
"Add a score entry to the adapt file."
;; This function parses the FORMAT string with the help of the
;; SPEC-ALIST and returns a list that can be eval'ed to return a
;; string.
- (let ((xemacs-mule-p (and gnus-xemacs (featurep 'mule)))
+ (let ((xemacs-mule-p (and (featurep 'xemacs) (featurep 'mule)))
max-width
spec flist fstring elem result dontinsert user-defined
type value pad-width spec-beg cut-width ignore-value
;; Under XEmacs, it's (funcall #<compiled-function ...>)
(not (and (eq 'funcall (car form))
(byte-code-function-p (cadr form)))))
- (fset 'gnus-tmp-func `(lambda () ,form))
+ (defalias 'gnus-tmp-func `(lambda () ,form))
(byte-compile 'gnus-tmp-func)
(setq compiled-function (gnus-byte-code 'gnus-tmp-func))
(set (intern (format "gnus-%s-line-format-spec" type))
(when gnus-simple-splash
(setq gnus-simple-splash nil)
(cond
- (gnus-xemacs
+ ((featurep 'xemacs)
(gnus-xmas-splash))
((and (eq window-system 'x)
(= (frame-height) (1+ (window-height))))
(let ((str (buffer-substring
(point) (progn (end-of-line) (point))))
(coding
- (and (or gnus-xemacs
+ (and (or (featurep 'xemacs)
(and (boundp 'enable-multibyte-characters)
enable-multibyte-characters))
(fboundp 'gnus-mule-get-coding-system)
(autoload 'pgg-verify-region "pgg" nil t))
(autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t)
+(autoload 'gnus-cache-write-active "gnus-cache")
(autoload 'gnus-set-summary-default-charset "gnus-i18n" nil t)
(defcustom gnus-kill-summary-on-exit t
(file-name-nondirectory file))))
(copy-file file to))
-(defun gnus-kill-all-overlays ()
- "Delete all overlays in the current buffer."
- (let* ((overlayss (overlay-lists))
- (buffer-read-only nil)
- (overlays (delq nil (nconc (car overlayss) (cdr overlayss)))))
- (while overlays
- (delete-overlay (pop overlays)))))
-
(defvar gnus-work-buffer " *gnus work*")
(defun gnus-set-work-buffer ()
(cond
((fboundp 'char-or-char-int-p)
;; Handle both types of marks for XEmacs-20.x.
- (fset 'gnus-characterp 'char-or-char-int-p))
+ (defalias 'gnus-characterp 'char-or-char-int-p))
;; V19 of XEmacs, probably.
(t
- (fset 'gnus-characterp 'characterp)))
-
- (fset 'gnus-make-overlay 'make-extent)
- (fset 'gnus-delete-overlay 'delete-extent)
- (fset 'gnus-overlay-put 'set-extent-property)
- (fset 'gnus-move-overlay 'gnus-xmas-move-overlay)
- (fset 'gnus-overlay-end 'extent-end-position)
- (fset 'gnus-kill-all-overlays 'gnus-xmas-kill-all-overlays)
- (fset 'gnus-extent-detached-p 'extent-detached-p)
- (fset 'gnus-add-text-properties 'gnus-xmas-add-text-properties)
- (fset 'gnus-put-text-property 'gnus-xmas-put-text-property)
- (fset 'gnus-deactivate-mark 'ignore)
- (fset 'gnus-window-edges 'window-pixel-edges)
+ (defalias 'gnus-characterp 'characterp)))
+
+ (defalias 'gnus-make-overlay 'make-extent)
+ (defalias 'gnus-delete-overlay 'delete-extent)
+ (defalias 'gnus-overlay-put 'set-extent-property)
+ (defalias 'gnus-move-overlay 'gnus-xmas-move-overlay)
+ (defalias 'gnus-overlay-buffer 'extent-object)
+ (defalias 'gnus-overlay-start 'extent-start-position)
+ (defalias 'gnus-overlay-end 'extent-end-position)
+ (defalias 'gnus-kill-all-overlays 'gnus-xmas-kill-all-overlays)
+ (defalias 'gnus-extent-detached-p 'extent-detached-p)
+ (defalias 'gnus-add-text-properties 'gnus-xmas-add-text-properties)
+ (defalias 'gnus-put-text-property 'gnus-xmas-put-text-property)
+ (defalias 'gnus-deactivate-mark 'ignore)
+ (defalias 'gnus-window-edges 'window-pixel-edges)
(if (and (<= emacs-major-version 19)
(< emacs-minor-version 14))
- (fset 'gnus-set-text-properties 'gnus-xmas-set-text-properties))
+ (defalias 'gnus-set-text-properties 'gnus-xmas-set-text-properties))
(when (fboundp 'turn-off-scroll-in-place)
(add-hook 'gnus-article-mode-hook 'turn-off-scroll-in-place))
(list 'funcall fval)
(cons 'progn (cdr (cdr fval))))))
- (fset 'gnus-x-color-values
- (if (fboundp 'x-color-values)
- 'x-color-values
- (lambda (color)
- (color-instance-rgb-components
- (make-color-instance color))))))
+ (defalias 'gnus-x-color-values
+ (if (fboundp 'x-color-values)
+ 'x-color-values
+ (lambda (color)
+ (color-instance-rgb-components
+ (make-color-instance color))))))
(defun gnus-xmas-redefine ()
"Redefine lots of Gnus functions for XEmacs."
- (fset 'gnus-summary-set-display-table 'gnus-xmas-summary-set-display-table)
- (fset 'gnus-visual-turn-off-edit-menu 'identity)
- (fset 'gnus-summary-recenter 'gnus-xmas-summary-recenter)
- (fset 'gnus-extent-start-open 'gnus-xmas-extent-start-open)
- (fset 'gnus-article-push-button 'gnus-xmas-article-push-button)
- (fset 'gnus-window-top-edge 'gnus-xmas-window-top-edge)
- (fset 'gnus-read-event-char 'gnus-xmas-read-event-char)
- (fset 'gnus-group-startup-message 'gnus-xmas-group-startup-message)
- (fset 'gnus-tree-minimize 'gnus-xmas-tree-minimize)
- (fset 'gnus-appt-select-lowest-window
+ (defalias 'gnus-summary-set-display-table 'gnus-xmas-summary-set-display-table)
+ (defalias 'gnus-visual-turn-off-edit-menu 'identity)
+ (defalias 'gnus-summary-recenter 'gnus-xmas-summary-recenter)
+ (defalias 'gnus-extent-start-open 'gnus-xmas-extent-start-open)
+ (defalias 'gnus-article-push-button 'gnus-xmas-article-push-button)
+ (defalias 'gnus-window-top-edge 'gnus-xmas-window-top-edge)
+ (defalias 'gnus-read-event-char 'gnus-xmas-read-event-char)
+ (defalias 'gnus-group-startup-message 'gnus-xmas-group-startup-message)
+ (defalias 'gnus-tree-minimize 'gnus-xmas-tree-minimize)
+ (defalias 'gnus-appt-select-lowest-window
'gnus-xmas-appt-select-lowest-window)
- (fset 'gnus-mail-strip-quoted-names 'gnus-xmas-mail-strip-quoted-names)
- (fset 'gnus-character-to-event 'character-to-event)
- (fset 'gnus-mode-line-buffer-identification
+ (defalias 'gnus-mail-strip-quoted-names 'gnus-xmas-mail-strip-quoted-names)
+ (defalias 'gnus-character-to-event 'character-to-event)
+ (defalias 'gnus-mode-line-buffer-identification
'gnus-xmas-mode-line-buffer-identification)
- (fset 'gnus-key-press-event-p 'key-press-event-p)
- (fset 'gnus-region-active-p 'region-active-p)
- (fset 'gnus-annotation-in-region-p 'gnus-xmas-annotation-in-region-p)
- (fset 'gnus-mime-button-menu 'gnus-xmas-mime-button-menu)
+ (defalias 'gnus-key-press-event-p 'key-press-event-p)
+ (defalias 'gnus-region-active-p 'region-active-p)
+ (defalias 'gnus-annotation-in-region-p 'gnus-xmas-annotation-in-region-p)
+ (defalias 'gnus-mime-button-menu 'gnus-xmas-mime-button-menu)
(add-hook 'gnus-group-mode-hook 'gnus-xmas-group-menu-add)
(add-hook 'gnus-summary-mode-hook 'gnus-xmas-summary-menu-add)
(defalias 'gnus-delete-overlay 'delete-overlay)
(defalias 'gnus-overlay-put 'overlay-put)
(defalias 'gnus-move-overlay 'move-overlay)
+ (defalias 'gnus-overlay-buffer 'overlay-buffer)
+ (defalias 'gnus-overlay-start 'overlay-start)
(defalias 'gnus-overlay-end 'overlay-end)
(defalias 'gnus-extent-detached-p 'ignore)
(defalias 'gnus-extent-start-open 'ignore)
(defvar gnus-agent nil
"Whether we want to use the Gnus agent or not.")
+(defvar gnus-agent-fetching nil
+ "Whether Gnus agent is in fetching mode.")
+
(defvar gnus-command-method nil
"Dynamically bound variable that says what the current backend is.")
(defun maybe-fbind (args)
(while args
(or (fboundp (car args))
- (fset (car args) 'ignore))
+ (defalias (car args) 'ignore))
(setq args (cdr args))))
(defun maybe-bind (args)
(mapcar (lambda (var) (unless (boundp var) (set var nil))) args))
+(maybe-fbind '(babel-fetch
+ babel-wash create-image decode-coding-string display-graphic-p
+ find-image font-create-object gnus-mule-get-coding-system
+ image-size image-type-available-p insert-image
+ mail-aliases-setup mm-copy-tree
+ mule-write-region-no-coding-system put-image
+ rmail-select-summary rmail-summary-exists rmail-update-summary
+ sc-cite-regexp set-font-family set-font-size temp-directory
+ url-view-url vcard-pretty-print
+ w3-coding-system-for-mime-charset w3-prepare-buffer w3-region
+ widget-make-intangible x-defined-colors))
+
+(maybe-bind '(adaptive-fill-first-line-regexp
+ adaptive-fill-regexp babel-history babel-translations
+ display-time-mail-function imap-password mail-mode-hook
+ url-current-callback-func url-be-asynchronous
+ url-current-callback-data url-working-buffer
+ url-current-mime-headers w3-meta-charset-content-type-regexp
+ w3-meta-content-type-charset-regexp))
+
(if (featurep 'xemacs)
(progn
(defvar track-mouse nil)
- (maybe-fbind '(posn-point
- event-start x-popup-menu
- facemenu-get-face window-at coordinates-in-window-p
- easy-menu-create-keymaps
- read-event internal-find-face internal-next-face-id
- make-face-internal set-frame-face-alist frame-face-alist
- facemenu-add-new-face make-face-x-resource-internal
- set-font-size set-font-family posn-window
- run-with-idle-timer mouse-minibuffer-check window-edges
- event-click-count track-mouse read-event mouse-movement-p
- event-end mouse-scroll-subr overlay-lists delete-overlay
- set-face-stipple mail-abbrevs-setup
- make-char-table set-char-table-range font-create-object
- x-color-values widget-make-intangible error-message-string
- w3-form-encode-xwfu gnus-mule-get-coding-system
- decode-coding-string mail-aliases-setup
- url-view-url w3-prepare-buffer
- set-buffer-multibyte
- find-non-ascii-charset-region char-charset
- find-charset-region
- find-coding-systems-region get-charset-property
- coding-system-get w3-region
- w3-coding-system-for-mime-charset
- 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 image-type-available-p
- put-image create-image display-graphic-p
- find-image insert-image image-size
- make-overlay overlay-put overlay-buffer overlay-start
- overlay-get overlay-end make-symbolic-link))
- (maybe-bind '(global-face-data
- mark-active transient-mark-mode mouse-selection-click-count
- mouse-selection-click-count-buffer buffer-display-table
- font-lock-defaults user-full-name user-login-name
- gnus-newsgroup-name gnus-article-x-face-too-ugly
+ (maybe-fbind '(char-charset
+ coding-system-get compute-motion coordinates-in-window-p
+ delete-overlay easy-menu-create-keymaps
+ error-message-string event-click-count event-end
+ event-start facemenu-add-new-face facemenu-get-face
+ find-charset-region find-coding-systems-for-charsets
+ find-coding-systems-region find-non-ascii-charset-region
+ frame-face-alist get-charset-property internal-find-face
+ internal-next-face-id mail-abbrevs-setup make-char-table
+ make-face-internal make-face-x-resource-internal
+ make-overlay mouse-minibuffer-check mouse-movement-p
+ mouse-scroll-subr overlay-buffer overlay-end
+ overlay-get overlay-lists overlay-put
+ overlay-start posn-point posn-window
+ read-event read-event run-with-idle-timer
+ set-buffer-multibyte set-char-table-range
+ set-face-stipple set-frame-face-alist track-mouse
+ url-retrieve w3-form-encode-xwfu window-at
+ window-edges x-color-values x-popup-menu))
+ (maybe-bind '(buffer-display-table
+ buffer-file-coding-system font-lock-defaults
+ global-face-data gnus-article-x-face-too-ugly
gnus-newsgroup-charset gnus-newsgroup-emphasis-alist
- mail-mode-hook
- adaptive-fill-first-line-regexp adaptive-fill-regexp
- url-current-mime-headers buffer-file-coding-system
- w3-image-mappings url-current-mime-type
- w3-meta-content-type-charset-regexp
- w3-meta-charset-content-type-regexp
- 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
- url-current-mime-headers help-echo-owns-message
- 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
- window-pixel-height map-extents
- make-color-instance color-instance-name specifier-instance
- device-type device-class get-popup-menu-response event-object
- add-submenu set-font-family
- font-create-object set-font-size frame-device find-face
- set-extent-property make-extent characterp display-error
- set-face-doc-string frame-property face-doc-string
- button-press-event-p next-command-event
- widget-make-intangible glyphp make-glyph set-glyph-image
- set-glyph-property event-glyph glyph-property event-point
- device-on-window-system-p make-gui-button Info-goto-node
- pp-to-string color-name
- gnus-mule-get-coding-system decode-coding-string
- mail-aliases-setup
- url-view-url w3-prepare-buffer
- char-int
- annotationp delete-annotation make-image-specifier
- make-annotation events-to-keys
- w3-do-setup w3-region
- 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 sc-cite-regexp
- put-image create-image display-graphic-p
- find-image insert-image image-size
- vcard-pretty-print image-type-available-p
- coding-system-get find-coding-system
- find-coding-systems-for-charsets find-coding-systems-region
- font-lock-set-defaults function-max-args get-charset-property
- make-symbolic-link map-extents smiley-encode-buffer
- toolbar-gnus)))
+ gnus-newsgroup-name mark-active
+ mouse-selection-click-count
+ mouse-selection-click-count-buffer
+ temporary-file-directory transient-mark-mode
+ url-current-mime-type
+ user-full-name user-login-name
+ w3-image-mappings)))
+ (maybe-bind '(browse-url-browser-function
+ enable-multibyte-characters help-echo-owns-message))
+ (maybe-fbind '(Info-goto-node
+ add-submenu annotation-glyph annotationp babel-as-string
+ button-press-event-p char-int characterp color-instance-name
+ color-instance-rgb-components color-name delete-annotation
+ device-class device-on-window-system-p device-type
+ display-error event-glyph event-object event-point
+ events-to-keys face-doc-string find-face frame-device
+ frame-property get-popup-menu-response glyph-height
+ glyph-property glyph-width glyphp make-annotation
+ make-color-instance make-extent make-glyph make-gui-button
+ make-image-specifier map-extents next-command-event
+ pp-to-string read-color set-extent-property
+ set-face-doc-string set-glyph-image set-glyph-property
+ specifier-instance url-generic-parse-url
+ valid-image-instantiator-format-p w3-do-setup
+ window-pixel-height window-pixel-width)))
+
+;; T-gnus.
+(if (featurep 'xemacs)
+ (maybe-bind '(mh-lib-progs))
+ ;; FSFmacs
+ (maybe-fbind '(charsetp
+ font-lock-set-defaults function-max-args
+ smiley-encode-buffer))
+ (if (boundp 'MULE)
+ (progn
+ (maybe-fbind '(coding-system-get
+ file-name-extension find-coding-systems-region
+ get-charset-property))
+ (maybe-bind '(mh-lib-progs)))))
(require 'custom)
:type '(choice (const :tag "unlimited" nil)
(integer 1000000)))
+(defcustom message-alternative-emails nil
+ "A regexp to match the alternative email addresses.
+The first matched address (not primary one) is used in the From field."
+ :group 'message-headers
+ :type '(choice (const :tag "Always use primary" nil)
+ regexp))
+
;;; Internal variables.
+(defvar message-sending-message "Sending...")
(defvar message-buffer-list nil)
(defvar message-this-is-news nil)
(defvar message-this-is-mail nil)
(put-text-property (point-min) (point-max) 'read-only nil))
(run-hooks 'message-send-hook)
(message-fix-before-sending)
- (message "Sending...")
+ (message message-sending-message)
(let ((message-encoding-buffer
(message-generate-new-buffer-clone-locals " message encoding"))
(message-edit-buffer (current-buffer))
(message-insert-signature)
(save-restriction
(message-narrow-to-headers)
+ (if message-alternative-emails
+ (message-use-alternative-email-as-from))
(run-hooks 'message-header-setup-hook))
(set-buffer-modified-p nil)
(setq buffer-undo-list nil)
(let ((minibuffer-setup-hook 'mail-abbrev-minibuffer-setup-hook))
(read-string prompt))))
+(defun message-use-alternative-email-as-from ()
+ (require 'mail-utils)
+ (let* ((fields '("To" "Cc"))
+ (emails
+ (split-string
+ (mail-strip-quoted-names
+ (mapconcat 'message-fetch-reply-field fields ","))
+ "[ \f\t\n\r\v,]+"))
+ email)
+ (while emails
+ (if (string-match message-alternative-emails (car emails))
+ (setq email (car emails)
+ emails nil))
+ (pop emails))
+ (unless (or (not email) (equal email user-mail-address))
+ (goto-char (point-max))
+ (insert "From: " email "\n"))))
+
(defun message-save-drafts ()
"Postponing the message."
(interactive)
"Exchange point and mark, but allow for XEmacs' optional argument."
(exchange-point-and-mark message-xmas-dont-activate-region))
-(fset 'message-exchange-point-and-mark 'message-xmas-exchange-point-and-mark)
+(defalias 'message-exchange-point-and-mark
+ 'message-xmas-exchange-point-and-mark)
(defun message-xmas-maybe-fontify ()
(when (featurep 'font-lock)
(substring table (+ a 26) 255))))
(when (>= emacs-major-version 20)
- (fset 'message-make-caesar-translation-table
- 'message-xmas-make-caesar-translation-table))
+ (defalias 'message-make-caesar-translation-table
+ 'message-xmas-make-caesar-translation-table))
(add-hook 'message-mode-hook 'message-xmas-maybe-fontify)
;;; Code:
+(eval-when-compile (require 'cl))
(require 'mail-parse)
(require 'gnus-mailcap)
(when (fboundp 'set-buffer-multibyte)
(set-buffer-multibyte nil)))
+(defsubst mm-enable-multibyte-mule4 ()
+ "Enable multibyte in the current buffer.
+Only used in Emacs Mule 4."
+ (when (and (fboundp 'set-buffer-multibyte)
+ (boundp 'enable-multibyte-characters)
+ (default-value 'enable-multibyte-characters)
+ (not (charsetp 'eight-bit-control)))
+ (set-buffer-multibyte t)))
+
+(defsubst mm-disable-multibyte-mule4 ()
+ "Disable multibyte in the current buffer.
+Only used in Emacs Mule 4."
+ (when (and (fboundp 'set-buffer-multibyte)
+ (not (charsetp 'eight-bit-control)))
+ (set-buffer-multibyte nil)))
+
(defun mm-preferred-coding-system (charset)
;; A typo in some Emacs versions.
(or (get-charset-property charset 'prefered-coding-system)
"Evaluate FORMS there like `progn' in current buffer."
(let ((multibyte (make-symbol "multibyte")))
`(if (or (featurep 'xemacs)
- (not (fboundp 'set-buffer-multibyte)))
+ (not (fboundp 'set-buffer-multibyte))
+ (charsetp 'eight-bit-control)) ;; For Emacs Mule 4 only.
(progn
,@forms)
(let ((,multibyte (default-value 'enable-multibyte-characters)))
(require 'nnoo)
(eval-when-compile
;; This is just to shut up the byte-compiler.
- (fset 'nndraft-request-group 'ignore))
+ (defalias 'nndraft-request-group 'ignore))
(nnoo-declare nndraft
nnmh)
;; style. -SLB
(defvoo nnfolder-ignore-active-file nil
- "If non-nil, the active file is ignores.
+ "If non-nil, the active file is ignored.
This causes nnfolder to do some extra work in order to determine the
true active ranges of an mbox file. Note that the active file is
-still saved, but it's values are not used. This costs some extra time
+still saved, but its values are not used. This costs some extra time
when scanning an mbox when opening it.")
(defvoo nnfolder-distrust-mbox nil
(message "%s(Y/n) Yes" prompt)
t))))
-(fset 'nnheader-run-at-time 'nnheader-xmas-run-at-time)
-(fset 'nnheader-cancel-timer 'delete-itimer)
-(fset 'nnheader-cancel-function-timers 'ignore)
-(fset 'nnheader-Y-or-n-p 'nnheader-xmas-Y-or-n-p)
+(defalias 'nnheader-run-at-time 'nnheader-xmas-run-at-time)
+(defalias 'nnheader-cancel-timer 'delete-itimer)
+(defalias 'nnheader-cancel-function-timers 'ignore)
+(defalias 'nnheader-Y-or-n-p 'nnheader-xmas-Y-or-n-p)
(provide 'nnheaderxm)
group (gnus-server-to-method
(format "nnimap:%s" server))))
(new-uidvalidity (imap-mailbox-get 'uidvalidity))
- (old-uidvalidity (gnus-group-get-parameter gnusgroup 'uidvalidity)))
+ (old-uidvalidity (gnus-group-get-parameter gnusgroup 'uidvalidity))
+ (dir (file-name-as-directory (expand-file-name nnimap-directory)))
+ (nameuid (nnheader-translate-file-chars
+ (concat nnimap-nov-file-name
+ (if (equal server "")
+ "unnamed"
+ server) "." group "." old-uidvalidity
+ nnimap-nov-file-name-suffix) t))
+ (file (if (or nnmail-use-long-file-names
+ (file-exists-p (expand-file-name nameuid dir)))
+ (expand-file-name nameuid dir)
+ (expand-file-name
+ (encode-coding-string
+ (nnheader-replace-chars-in-string nameuid ?. ?/)
+ nnmail-pathname-coding-system)
+ dir))))
(if old-uidvalidity
(if (not (equal old-uidvalidity new-uidvalidity))
- nil ;; uidvalidity clash
+ ;; uidvalidity clash
+ (gnus-delete-file file)
(gnus-group-set-parameter gnusgroup 'uidvalidity new-uidvalidity)
t)
(gnus-group-add-parameter gnusgroup (cons 'uidvalidity new-uidvalidity))
(defun nnimap-group-overview-filename (group server)
"Make pathname for GROUP on SERVER."
- (let ((dir (file-name-as-directory (expand-file-name nnimap-directory)))
- (file (nnheader-translate-file-chars
- (concat nnimap-nov-file-name
- (if (equal server "")
- "unnamed"
- server) "." group nnimap-nov-file-name-suffix) t)))
- (if (or nnmail-use-long-file-names
- (file-exists-p (concat dir file)))
- (concat dir file)
- (concat dir (encode-coding-string
- (nnheader-replace-chars-in-string file ?. ?/)
- nnmail-pathname-coding-system)))))
+ (let* ((dir (file-name-as-directory (expand-file-name nnimap-directory)))
+ (uidvalidity (gnus-group-get-parameter
+ (gnus-group-prefixed-name
+ group (gnus-server-to-method
+ (format "nnimap:%s" server)))
+ 'uidvalidity))
+ (name (nnheader-translate-file-chars
+ (concat nnimap-nov-file-name
+ (if (equal server "")
+ "unnamed"
+ server) "." group nnimap-nov-file-name-suffix) t))
+ (nameuid (nnheader-translate-file-chars
+ (concat nnimap-nov-file-name
+ (if (equal server "")
+ "unnamed"
+ server) "." group "." uidvalidity
+ nnimap-nov-file-name-suffix) t))
+ (oldfile (if (or nnmail-use-long-file-names
+ (file-exists-p (expand-file-name name dir)))
+ (expand-file-name name dir)
+ (expand-file-name
+ (encode-coding-string
+ (nnheader-replace-chars-in-string name ?. ?/)
+ nnmail-pathname-coding-system)
+ dir)))
+ (newfile (if (or nnmail-use-long-file-names
+ (file-exists-p (expand-file-name nameuid dir)))
+ (expand-file-name nameuid dir)
+ (expand-file-name
+ (encode-coding-string
+ (nnheader-replace-chars-in-string nameuid ?. ?/)
+ nnmail-pathname-coding-system)
+ dir))))
+ (when (and (file-exists-p oldfile) (not (file-exists-p newfile)))
+ (message "nnimap: Upgrading novcache filename...")
+ (sit-for 1)
+ (gnus-make-directory (file-name-directory newfile))
+ (unless (ignore-errors (rename-file oldfile newfile) t)
+ (if (ignore-errors (copy-file oldfile newfile) t)
+ (delete-file oldfile)
+ (error "Can't rename `%s' to `%s'" oldfile newfile))))
+ newfile))
(defun nnimap-retrieve-headers-from-file (group server)
(with-current-buffer nntp-server-buffer
(index-url . nnshimbun-url)
(from-address . "zdnn@softbank.co.jp")
(make-contents . nnshimbun-make-html-contents)
- (contents-start . "\\(<!--BODY-->\\|[0-9]+\e$BG/\e(B[0-9]+\e$B7n\e(B[0-9]+\e$BF|\e(B[^<]*</font></td>[ \t\r\f\n]*</tr>[ \t\r\f\n]*</table>[ \t\r\f\n]*\\(</p>\\)?\\)")
- (contents-end . "\\(<!--BODYEND-->\\|<div align=\"right\">\\|<\\(b\\|strong\\)>\\[</\\2>[^<]*<\\2>ZDNet/\\(JAPAN\\|USA\\)\\]\\(<[^>]+>\\)?</\\2>\\)"))
+ (contents-start . "\\(<!--BODY-->\\|<!--DATE-->\\)")
+ (contents-end . "\\(<!--BODYEND-->\\|<!--BYLINEEND-->\\)"))
("mew"
(url . "http://www.mew.org/archive/")
(groups ,@(mapcar #'car nnshimbun-mew-groups))
(defvoo nntp-connection-timeout nil
"*Number of seconds to wait before an nntp connection times out.
-If this variable is nil, which is the default, no timers are set.")
+If this variable is nil, which is the default, no timers are set.
+NOTE: This variable is never seen to work in FSF Emacs 20 and XEmacs 21.")
(defvoo nntp-prepare-post-hook nil
"*Hook run just before posting an article. It is supposed to be used for
(error nil)
(quit
(message "Quit opening connection")
+ (nntp-kill-buffer pbuffer)
(signal 'quit nil)
nil))))
(when timer
(setq url-current-callback-data data
url-be-asynchronous t
url-current-callback-func callback)
- (url-retrieve url))
+ (url-retrieve url nil))
(setq-default url-be-asynchronous old-asynch)))
+(if (fboundp 'url-retrieve-synchronously)
+ (defun nnweb-url-retrieve-asynch (url callback &rest data)
+ (url-retrieve url callback data)))
+
;;;
;;; DejaNews functions.
;;;
encode lines starting with \"From\"."
(interactive "r")
(save-excursion
- (mm-with-unibyte-current-buffer
- (save-restriction
- (narrow-to-region from to)
+ (save-restriction
+ (narrow-to-region from to)
+ (mm-with-unibyte-current-buffer
;; (mm-encode-body)
;; Encode all the non-ascii and control characters.
(goto-char (point-min))
method (cdr elem))))
(cond
((eq method 'mime)
- (rfc2047-encode-region (point-min) (point-max))
- (rfc2047-fold-region (point-min) (point-max)))
+ (rfc2047-encode-region (point-min) (point-max)))
((eq method 'default)
(if (and (featurep 'mule)
mail-parse-charset)
(defun rfc2047-dissect-region (b e)
"Dissect the region between B and E into words."
- (let ((all-specials (concat ietf-drums-tspecials " \t\n\r"))
- (special-list (mapcar 'identity ietf-drums-tspecials))
- (blank-list '(? ?\t ?\n ?\r))
- words current cs state mail-parse-mule-charset)
+ (let ((word-chars "-A-Za-z0-9!*+/")
+ ;; Not using ietf-drums-specials-token makes life simple.
+ mail-parse-mule-charset
+ words point current
+ result word)
(save-restriction
(narrow-to-region b e)
(goto-char (point-min))
- (skip-chars-forward all-specials)
- (setq b (point))
+ (skip-chars-forward "\000-\177")
(while (not (eobp))
- (cond
- ((not state)
- (setq state 'word)
- (if (not (eq (setq cs (mm-charset-after)) 'ascii))
- (setq current cs))
- (setq b (point)))
- ((eq state 'blank)
- (cond
- ((memq (char-after) special-list)
- (setq state nil))
- ((memq (char-after) blank-list))
- (t
- (setq state 'word)
- (unless b
- (setq b (point)))
- (if (not (eq (setq cs (mm-charset-after)) 'ascii))
- (setq current cs)))))
- ((eq state 'word)
- (cond
- ((memq (char-after) special-list)
- (setq state nil)
- (push (list b (point) current) words)
- (setq current nil))
- ((memq (char-after) blank-list)
- (setq state 'blank)
- (if (not current)
- (setq b nil)
- (push (list b (point) current) words)
- (setq b (point))
- (setq current nil)))
- ((or (eq (setq cs (mm-charset-after)) 'ascii)
- (if current
- (eq current cs)
- (setq current cs))))
- (t
- (push (list b (point) current) words)
- (setq current cs)
- (setq b (point))))))
- (if state
- (forward-char)
- (skip-chars-forward all-specials)))
- (if (eq state 'word)
- (push (list b (point) current) words)))
- words))
+ (setq point (point))
+ (skip-chars-backward word-chars b)
+ (unless (eq b (point))
+ (push (cons (buffer-substring b (point)) nil) words))
+ (setq b (point))
+ (goto-char point)
+ (setq current (mm-charset-after))
+ (forward-char 1)
+ (skip-chars-forward word-chars)
+ (while (and (not (eobp))
+ (eq (mm-charset-after) current))
+ (forward-char 1)
+ (skip-chars-forward word-chars))
+ (unless (eq b (point))
+ (push (cons (buffer-substring b (point)) current) words))
+ (setq b (point))
+ (skip-chars-forward "\000-\177"))
+ (unless (eq b (point))
+ (push (cons (buffer-substring b (point)) nil) words)))
+ ;; merge adjacent words
+ (setq word (pop words))
+ (while word
+ (if (and (cdr word)
+ (caar words)
+ (not (cdar words))
+ (not (string-match "[^ \t]" (caar words))))
+ (if (eq (cdr (nth 1 words)) (cdr word))
+ (progn
+ (setq word (cons (concat
+ (car (nth 1 words)) (caar words)
+ (car word))
+ (cdr word)))
+ (pop words)
+ (pop words))
+ (push (cons (concat (caar words) (car word)) (cdr word))
+ result)
+ (pop words)
+ (setq word (pop words)))
+ (push word result)
+ (setq word (pop words))))
+ result))
(defun rfc2047-encode-region (b e)
"Encode all encodable words in REGION."
- (let ((words (rfc2047-dissect-region b e))
- beg end current word)
- (while (setq word (pop words))
- (if (and (eq (nth 2 word) current)
- (eq beg (nth 1 word)))
- (setq beg (nth 0 word))
- (when current
- (if (and (eq beg (nth 1 word)) (nth 2 word))
- (progn
- ;; There might be a bug in Emacs Mule.
- ;; A space must be inserted before encoding.
- (goto-char beg)
- (insert " ")
- (rfc2047-encode (1+ beg) (1+ end) current))
- (rfc2047-encode beg end current)))
- (setq current (nth 2 word)
- beg (nth 0 word)
- end (nth 1 word))))
- (when current
- (rfc2047-encode beg end current))))
+ (let ((words (rfc2047-dissect-region b e)) word)
+ (save-restriction
+ (narrow-to-region b e)
+ (delete-region (point-min) (point-max))
+ (while (setq word (pop words))
+ (if (not (cdr word))
+ (insert (car word))
+ (rfc2047-fold-region (gnus-point-at-bol) (point))
+ (goto-char (point-max))
+ (if (> (- (point) (save-restriction
+ (widen)
+ (gnus-point-at-bol))) 76)
+ (insert "\n "))
+ ;; Insert blank between encoded words
+ (if (eq (char-before) ?=) (insert " "))
+ (rfc2047-encode (point)
+ (progn (insert (car word)) (point))
+ (cdr word))))
+ (rfc2047-fold-region (point-min) (point-max)))))
(defun rfc2047-encode-string (string)
"Encode words in STRING."
(save-restriction
(narrow-to-region b e)
(goto-char (point-min))
- (let ((break nil))
+ (let ((break nil)
+ (bol (save-restriction
+ (widen)
+ (gnus-point-at-bol))))
(while (not (eobp))
- (cond
- ((memq (char-after) '(? ?\t))
- (setq break (point)))
- ((and (not break)
- (looking-at "=\\?"))
- (setq break (point)))
- ((and break
- (looking-at "\\?=")
- (> (- (point) (gnus-point-at-bol)) 76))
+ (when (and break (> (- (point) bol) 76))
(goto-char break)
(setq break nil)
- (insert "\n ")))
- (unless (eobp)
- (forward-char 1))))))
+ (insert "\n ")
+ (setq bol (1- (point)))
+ ;; Don't break before the first non-LWSP characters.
+ (skip-chars-forward " \t")
+ (forward-char 1))
+ (cond
+ ((eq (char-after) ?\n)
+ (forward-char 1)
+ (setq bol (point)
+ break nil)
+ (skip-chars-forward " \t")
+ (unless (or (eobp) (eq (char-after) ?\n))
+ (forward-char 1)))
+ ((eq (char-after) ?\r)
+ (forward-char 1))
+ ((memq (char-after) '(? ?\t))
+ (skip-chars-forward " \t")
+ (setq break (1- (point))))
+ ((not break)
+ (if (not (looking-at "=\\?"))
+ (if (eq (char-after) ?=)
+ (forward-char 1)
+ (skip-chars-forward "^ \t\n\r="))
+ (setq break (point))
+ (skip-chars-forward "^ \t\n\r")))
+ (t
+ (skip-chars-forward "^ \t\n\r"))))
+ (when (and break (> (- (point) bol) 76))
+ (goto-char break)
+ (setq break nil)
+ (insert "\n ")
+ (setq bol (1- (point)))
+ ;; Don't break before the first non-LWSP characters.
+ (skip-chars-forward " \t")
+ (forward-char 1)))))
+
+(defun rfc2047-unfold-region (b e)
+ "Fold the long lines in the region."
+ (save-restriction
+ (narrow-to-region b e)
+ (goto-char (point-min))
+ (let ((bol (save-restriction
+ (widen)
+ (gnus-point-at-bol)))
+ (eol (gnus-point-at-eol))
+ leading)
+ (forward-line 1)
+ (while (not (eobp))
+ (looking-at "[ \t]*")
+ (setq leading (- (match-end 0) (match-beginning 0)))
+ (if (< (- (gnus-point-at-eol) bol leading) 76)
+ (progn
+ (goto-char eol)
+ (delete-region eol (progn
+ (skip-chars-forward "[ \t\n\r]+")
+ (1- (point)))))
+ (setq bol (gnus-point-at-bol)))
+ (setq eol (gnus-point-at-eol))
+ (forward-line 1)))))
(defun rfc2047-b-encode-region (b e)
"Encode the header contained in REGION with the B encoding."
(subst-char-in-region (point-min) (point-max) ? ?_)
(setq alist nil))
(pop alist))
- (goto-char (point-min))
- (while (not (eobp))
- (goto-char (min (point-max) (+ 64 (point))))
+ (goto-char (1+ (point-min)))
+ (while (and (not (bobp)) (not (eobp)))
+ (goto-char (min (point-max) (save-restriction
+ (widen)
+ ;; THe QP encapsulation is about 20.
+ (+ 56 (gnus-point-at-bol)))))
(search-backward "=" (- (point) 2) t)
- (unless (eobp)
+ (unless (or (bobp) (eobp))
(insert "\n")))))))
;;;
mail-parse-charset
(not (eq mail-parse-charset 'us-ascii))
(not (eq mail-parse-charset 'gnus-decoded)))
- (mm-decode-coding-region b (point-max) mail-parse-charset))))))
+ (mm-decode-coding-region b (point-max) mail-parse-charset))
+ (rfc2047-unfold-region (point-min) (point-max))))))
(defun rfc2047-decode-string (string)
"Decode the quoted-printable-encoded STRING and return the results."
(when (and (eq cs 'ascii)
mail-parse-charset)
(setq cs mail-parse-charset))
- (mm-decode-coding-string
- (cond
- ((equal "B" encoding)
- (base64-decode-string string))
- ((equal "Q" encoding)
- (quoted-printable-decode-string
- (mm-replace-chars-in-string string ?_ ? )))
- (t (error "Invalid encoding: %s" encoding)))
- cs))))
+ (mm-with-unibyte-current-buffer
+ ;; In Emacs Mule 4, decoding UTF-8 should be in unibyte mode.
+ (mm-decode-coding-string
+ (cond
+ ((equal "B" encoding)
+ (base64-decode-string string))
+ ((equal "Q" encoding)
+ (quoted-printable-decode-string
+ (mm-replace-chars-in-string string ?_ ? )))
+ (t (error "Invalid encoding: %s" encoding)))
+ cs)))))
(provide 'rfc2047)
(let* ((data-directory smiley-data-directory)
(image (find-image (list (list :type 'pbm
:file (nth 2 elt)
- :ascent 100)))))
+ :ascent 'center)))))
(if image
(push (list (car elt) (cadr elt) image)
smiley-cached-regexp-alist)))))
(if (gnus-buffer-live-p webmail-buffer)
(set-buffer webmail-buffer)
(setq webmail-buffer
- (mm-with-unibyte
- (nnheader-set-temp-buffer " *webmail*")))))
+ (nnheader-set-temp-buffer " *webmail*"))
+ (mm-disable-multibyte-mule4)))
(defvar url-package-name)
(defvar url-package-version)
+2000-10-07 16:50:14 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * Makefile.in: Use install-info.
+
+2000-10-06 14:38:27 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * message.texi (Message Headers): Add.
+
2000-10-04 09:23:49 ShengHuo ZHU <zsh@cs.rochester.edu>
* gnus.texi (Article Hiding): Add.
--- /dev/null
+@c -*-texinfo-*-
+@node GNU Free Documentation License, Intro, Copying, Top
+
+@appendix GNU Free Documentation License
+@center Version 1.1, March 2000
+
+@display
+Copyright (C) 2000 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+@sp 1
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+written document ``free'' in the sense of freedom: to assure everyone
+the effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or noncommercially. Secondarily,
+this License preserves for the author and publisher a way to get
+credit for their work, while not being considered responsible for
+modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@sp 1
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a
+notice placed by the copyright holder saying it can be distributed
+under the terms of this License. The ``Document'', below, refers to any
+such manual or work. Any member of the public is a licensee, and is
+addressed as ``you''.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (For example, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, whose contents can be viewed and edited directly and
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup has been designed to thwart or discourage
+subsequent modification by readers is not Transparent. A copy that is
+not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML designed for human modification. Opaque formats include
+PostScript, PDF, proprietary formats that can be read and edited only
+by proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML produced by some word processors for output
+purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+@sp 1
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+@sp 1
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100,
+and the Document's license notice requires Cover Texts, you must enclose
+the copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a publicly-accessible computer-network location containing a complete
+Transparent copy of the Document, free of added material, which the
+general network-using public has access to download anonymously at no
+charge using public-standard network protocols. If you use the latter
+option, you must take reasonably prudent steps, when you begin
+distribution of Opaque copies in quantity, to ensure that this
+Transparent copy will remain thus accessible at the stated location
+until at least one year after the last time you distribute an Opaque
+copy (directly or through your agents or retailers) of that edition to
+the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+@sp 1
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.@*
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has less than five).@*
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.@*
+D. Preserve all the copyright notices of the Document.@*
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.@*
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.@*
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.@*
+H. Include an unaltered copy of this License.@*
+I. Preserve the section entitled ``History'', and its title, and add to
+ it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section entitled ``History'' in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.@*
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the ``History'' section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.@*
+K. In any section entitled ``Acknowledgements'' or ``Dedications'',
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.@*
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.@*
+M. Delete any section entitled ``Endorsements''. Such a section
+ may not be included in the Modified Version.@*
+N. Do not retitle any existing section as ``Endorsements''
+ or to conflict in title with any Invariant Section.@*
+@sp 1
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+@sp 1
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled ``History''
+in the various original documents, forming one section entitled
+``History''; likewise combine any sections entitled ``Acknowledgements'',
+and any sections entitled ``Dedications''. You must delete all sections
+entitled ``Endorsements.''
+@sp 1
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+@sp 1
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, does not as a whole count as a Modified Version
+of the Document, provided no compilation copyright is claimed for the
+compilation. Such a compilation is called an ``aggregate'', and this
+License does not apply to the other self-contained works thus compiled
+with the Document, on account of their being thus compiled, if they
+are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one quarter
+of the entire aggregate, the Document's Cover Texts may be placed on
+covers that surround only the Document within the aggregate.
+Otherwise they must appear on covers around the whole aggregate.
+@sp 1
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License provided that you also include the
+original English version of this License. In case of a disagreement
+between the translation and the original English version of this
+License, the original English version will prevail.
+@sp 1
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+@sp 1
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+@end enumerate
+
+@unnumberedsec ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the Invariant Sections being @var{list their titles}, with the
+ Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}.
+ A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+If you have no Invariant Sections, write ``with no Invariant Sections''
+instead of saying which ones are invariant. If you have no
+Front-Cover Texts, write ``no Front-Cover Texts'' instead of
+``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being none, with the Front-Cover texts being ``A GNU
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
license is included in the section entitled ``GNU Free Documentation
-License''.
+License'' in the Emacs manual.
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
this GNU Manual, like GNU software. Copies published by the Free
Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
@end ifnottex
@tex
Invariant Sections being none, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
license is included in the section entitled ``GNU Free Documentation
-License''.
+License'' in the Emacs manual.
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
this GNU Manual, like GNU software. Copies published by the Free
Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
@end titlepage
@page
audio/wav; wavplayer %s
@end example
-This says that all image files should be displayed with @samp{xv}, and
-that realaudio files should be played by @samp{rvplayer}.
+This says that all image files should be displayed with @code{gimp}, and
+that realaudio files should be played by @code{rvplayer}.
The @code{mailcap} library parses this file, and provides functions for
matching types.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being none, with the Front-Cover texts being ``A GNU
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
license is included in the section entitled ``GNU Free Documentation
-License''.
+License'' in the Emacs manual.
\e$B$3$NJ8=q$r!"%U%j!<%=%U%H%&%'%":bCDH/9T$N\e(B GNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q\e(B
\e$BBh\e(B 1.1 \e$BHG$^$?$O$=$l0J9_$NHG$,Dj$a$k>r7o$N2<$GJ#@=!"G[I[!"$"$k$$$OJQ99$9\e(B
\e$B$k$3$H$r5v2D$9$k!#JQ99IT2DItJ,$O;XDj$7$J$$!#!V\e(BA GNU Manual\e$B!W$OI=I=;f%F\e(B
\e$B%-%9%H!"0J2<$N\e(B (a) \e$B$ON"I=;f%F%-%9%H$G$"$k!#$3$NMxMQ5vBz7@Ls=q$NJ#<L$O\e(B
-\e$B!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$H$$$&>O$K4^$^$l$F$$$k!#\e(B
+\e$B!V\e(BEmacs manual\e$B!W$N!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$H$$$&>O$K4^$^$l$F$$$k!#\e(B
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
this GNU Manual, like GNU software. Copies published by the Free
\e$B$N$h$&$KJ#@=$7$?$jJQ99$9$k<+M3$,$"$k!#J#@=$O%U%j!<%=%U%H%&%'%":bCD$K$h$C\e(B
\e$B$F=PHG$5$l$?!#\e(B(\e$B%U%j!<%=%U%H%&%'%":bCD$O\e(B) GNU \e$B$N3+H/$N$?$a$KI,MW$J;q6b$r\e(B
\e$B=8$a$F$$$k!#!W\e(B
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+
+\e$B$3$NJ8=q$O!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$K4p$E$$$FG[I[$5$l$?<}=8Cx:nJ*\e(B
+\e$B$N0lIt$G$9!#$b$7$"$J$?$,$3$NJ8=q$r<}=8Cx:nJ*$+$iJ,N%$7$FG[I[$7$?$$$H$-$O!"\e(B
+\e$B7@Ls=q$NBh\e(B 6 \e$B9`$K5-=R$5$l$F$$$k$h$&$K!"J8=q$K7@Ls=q$NJ#<L$rIU2C$9$k$3$H\e(B
+\e$B$K$h$C$F!"9T$J$&$3$H$,$G$-$^$9!#\e(B
\newpage
\end{titlepage}
@end iflatex
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being none, with the Front-Cover texts being ``A GNU
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
license is included in the section entitled ``GNU Free Documentation
-License''.
+License'' in the Emacs manual.
\e$B$3$NJ8=q$r!"%U%j!<%=%U%H%&%'%":bCDH/9T$N\e(B GNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q\e(B
\e$BBh\e(B 1.1 \e$BHG$^$?$O$=$l0J9_$NHG$,Dj$a$k>r7o$N2<$GJ#@=!"G[I[!"$"$k$$$OJQ99$9\e(B
\e$B$k$3$H$r5v2D$9$k!#JQ99IT2DItJ,$O;XDj$7$J$$!#!V\e(BA GNU Manual\e$B!W$OI=I=;f%F\e(B
\e$B%-%9%H!"0J2<$N\e(B (a) \e$B$ON"I=;f%F%-%9%H$G$"$k!#$3$NMxMQ5vBz7@Ls=q$NJ#<L$O\e(B
-\e$B!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$H$$$&>O$K4^$^$l$F$$$k!#\e(B
+\e$B!V\e(BEmacs manual\e$B!W$N!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$H$$$&>O$K4^$^$l$F$$$k!#\e(B
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
this GNU Manual, like GNU software. Copies published by the Free
\e$B$N$h$&$KJ#@=$7$?$jJQ99$9$k<+M3$,$"$k!#J#@=$O%U%j!<%=%U%H%&%'%":bCD$K$h$C\e(B
\e$B$F=PHG$5$l$?!#\e(B(\e$B%U%j!<%=%U%H%&%'%":bCD$O\e(B) GNU \e$B$N3+H/$N$?$a$KI,MW$J;q6b$r\e(B
\e$B=8$a$F$$$k!#!W\e(B
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+
+\e$B$3$NJ8=q$O!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$K4p$E$$$FG[I[$5$l$?<}=8Cx:nJ*\e(B
+\e$B$N0lIt$G$9!#$b$7$"$J$?$,$3$NJ8=q$r<}=8Cx:nJ*$+$iJ,N%$7$FG[I[$7$?$$$H$-$O!"\e(B
+\e$B7@Ls=q$NBh\e(B 6 \e$B9`$K5-=R$5$l$F$$$k$h$&$K!"J8=q$K7@Ls=q$NJ#<L$rIU2C$9$k$3$H\e(B
+\e$B$K$h$C$F!"9T$J$&$3$H$,$G$-$^$9!#\e(B
@end ifnottex
@tex
@vskip 0pt plus 1filll
Copyright @copyright{} 1995,96,97,98,99,2000 Free Software Foundation, Inc.
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
-\e$BCx:n8"I=<($H$3$N5v2DJ8$,$9$Y$F$NJ#@=$KB8:_$9$k8B$j!"$3$N@bL@=q$N$^$C$?$/\e(B
-\e$BF10l$NJ#@=$r:n$j!"G[I[$9$k$3$H$r5v2D$9$k!#\e(B
+\e$B$3$NJ8=q$r!"%U%j!<%=%U%H%&%'%":bCDH/9T$N\e(B GNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q\e(B
+\e$BBh\e(B 1.1 \e$BHG$^$?$O$=$l0J9_$NHG$,Dj$a$k>r7o$N2<$GJ#@=!"G[I[!"$"$k$$$OJQ99$9\e(B
+\e$B$k$3$H$r5v2D$9$k!#JQ99IT2DItJ,$O;XDj$7$J$$!#!V\e(BA GNU Manual\e$B!W$OI=I=;f%F\e(B
+\e$B%-%9%H!"0J2<$N\e(B (a) \e$B$ON"I=;f%F%-%9%H$G$"$k!#$3$NMxMQ5vBz7@Ls=q$NJ#<L$O\e(B
+\e$B!V\e(BEmacs manual\e$B!W$N!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$H$$$&>O$K4^$^$l$F$$$k!#\e(B
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software. Copies published by the Free
+Software Foundation raise funds for GNU development.''
-\e$BF10lJ#@=$N>r7o$N2<$G!"$=$l$K$h$C$FF@$i$l$?7k2L$r$3$N5v2DJ8$NI=<($HF10l$N\e(B
-\e$B>r7o$N$b$H$GG[I[$9$k8B$j!"$3$N@bL@=q$N=$@5HG$NJ#@=$r$7!"G[I[$9$k$3$H$r5v\e(B
-\e$B2D$9$k!#\e(B
+(a) FSF \e$B$NN"I=;f%F%-%9%H\e(B:\e$B!V$"$J$?$K$O$3$N\e(B GNU Manual \e$B$r\e(B GNU \e$B%=%U%H%&%'%"\e(B
+\e$B$N$h$&$KJ#@=$7$?$jJQ99$9$k<+M3$,$"$k!#J#@=$O%U%j!<%=%U%H%&%'%":bCD$K$h$C\e(B
+\e$B$F=PHG$5$l$?!#\e(B(\e$B%U%j!<%=%U%H%&%'%":bCD$O\e(B) GNU \e$B$N3+H/$N$?$a$KI,MW$J;q6b$r\e(B
+\e$B=8$a$F$$$k!#!W\e(B
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
-\e$B>e5-$N=$@5HG$K4X$9$k>r7o$N2<$G!"$3$N@bL@=q$NK]Lu$NJ#@=$r:n$j!"G[I[$9$k$3\e(B
-\e$B$H$r5v2D$9$k!#\e(B
+\e$B$3$NJ8=q$O!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$K4p$E$$$FG[I[$5$l$?<}=8Cx:nJ*\e(B
+\e$B$N0lIt$G$9!#$b$7$"$J$?$,$3$NJ8=q$r<}=8Cx:nJ*$+$iJ,N%$7$FG[I[$7$?$$$H$-$O!"\e(B
+\e$B7@Ls=q$NBh\e(B 6 \e$B9`$K5-=R$5$l$F$$$k$h$&$K!"J8=q$K7@Ls=q$NJ#<L$rIU2C$9$k$3$H\e(B
+\e$B$K$h$C$F!"9T$J$&$3$H$,$G$-$^$9!#\e(B
@end titlepage
@page
* Reverse Scoring:: \e$B8E$$$b$N$N;R$G$"$k$H$$$&LdBj$OLdBj$G$O$J$$\e(B
* Global Score Files:: \e$BCO$r$D$+$_!"<*$r@Z$jNv$/%9%3%"%U%!%$%k\e(B
* Kill Files:: \e$B$=$l$i$O$^$@$3$3$K$"$j$^$9$,!"L5;k$9$k;v$,$G$-$k\e(B
+* Converting Kill Files:: \e$B>C5n%U%!%$%k$r%9%3%"%U%!%$%k$KJQ49$9$k\e(B
* GroupLens:: \e$B$I$l$rFI$`$N$,9%$-$+$NM=8@$rF@$k\e(B
* Advanced Scoring:: \e$B%9%3%"$NK!B'$r:n$k$?$a$KO@M}I=8=$r;H$&\e(B
* Score Decays:: \e$B%9%3%"$r8O$l$F$$$+$;$k$N$OLr$KN)$D;v$b$"$k\e(B
* Reverse Scoring:: \e$B8E$$$b$N$N;R$G$"$k$H$$$&LdBj$OLdBj$G$O$J$$\e(B
* Global Score Files:: \e$BCO$r$D$+$_!"<*$r@Z$jNv$/%9%3%"%U%!%$%k\e(B
* Kill Files:: \e$B$=$l$i$O$^$@$3$3$K$"$j$^$9$,!"L5;k$9$k;v$,$G$-$k\e(B
+* Converting Kill Files:: \e$B>C5n%U%!%$%k$r%9%3%"%U%!%$%k$KJQ49$9$k\e(B
* GroupLens:: \e$B$I$l$rFI$`$N$,9%$-$+$NM=8@$rF@$k\e(B
* Advanced Scoring:: \e$B%9%3%"$NK!B'$r:n$k$?$a$KO@M}I=8=$r;H$&\e(B
* Score Decays:: \e$B%9%3%"$r8O$l$F$$$+$;$k$N$OLr$KN)$D;v$b$"$k\e(B
@end table
-@c The URL below is invalid and the code isn't on gnus.org.
-@ignore
@node Converting Kill Files
@section \e$B>C5n%U%!%$%k$NJQ49\e(B
@cindex kill files
\e$B$K\e(B @code{gnus-kill} \e$B7A<00J30$N$b$N$,$?$/$5$s4^$^$l$F$$$l$P!"$=$l$i$r<j$G\e(B
\e$BJQ49$7$J$1$l$P$J$j$^$;$s!#$"$k$$$OC1$K$=$l$i$r!"$=$N$^$^$K$7$F$*$$$F$/$@\e(B
\e$B$5$$!#\e(BGnus \e$B$O0JA0F1MM$K$=$l$i$r;H$C$F$/$l$k$G$7$g$&!#\e(B
-@end ignore
@node GroupLens
@section GroupLens
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being none, with the Front-Cover texts being ``A GNU
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
license is included in the section entitled ``GNU Free Documentation
-License''.
+License'' in the Emacs manual.
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
this GNU Manual, like GNU software. Copies published by the Free
Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
\newpage
\end{titlepage}
@end iflatex
Invariant Sections being none, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
license is included in the section entitled ``GNU Free Documentation
-License''.
+License'' in the Emacs manual.
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
this GNU Manual, like GNU software. Copies published by the Free
Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
@end ifnottex
@tex
@vskip 0pt plus 1filll
Copyright @copyright{} 1995,96,97,98,99,2000 Free Software Foundation, Inc.
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software. Copies published by the Free
+Software Foundation raise funds for GNU development.''
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
@end titlepage
@page
* 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.
* 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.
@end table
-@c The URL below is invalid and the code isn't on gnus.org.
-@ignore
+
@node Converting Kill Files
@section Converting Kill Files
@cindex kill files
non-@code{gnus-kill} forms than not, you'll have to convert them by
hand. Or just let them be as they are. Gnus will still use them as
before.
-@end ignore
@node GroupLens
@ifnottex
-This file documents Message, the Emacs message composition mode.
+This file documents Message, the Emacs message composition mode.
\e$B$3$N%U%!%$%k$O\e(B Emacs \e$B$N%a%C%;!<%8:n@.%b!<%I$G$"$k\e(B Message \e$B$K4X$9$k@bL@J8\e(B
\e$B=q$G$9!#\e(B
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being none, with the Front-Cover texts being ``A GNU
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
license is included in the section entitled ``GNU Free Documentation
License''.
\e$B$N$h$&$KJ#@=$7$?$jJQ99$9$k<+M3$,$"$k!#J#@=$O%U%j!<%=%U%H%&%'%":bCD$K$h$C\e(B
\e$B$F=PHG$5$l$?!#\e(B(\e$B%U%j!<%=%U%H%&%'%":bCD$O\e(B) GNU \e$B$N3+H/$N$?$a$KI,MW$J;q6b$r\e(B
\e$B=8$a$F$$$k!#!W\e(B
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+
+\e$B$3$NJ8=q$O!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$K4p$E$$$FG[I[$5$l$?<}=8Cx:nJ*\e(B
+\e$B$N0lIt$G$9!#$b$7$"$J$?$,$3$NJ8=q$r<}=8Cx:nJ*$+$iJ,N%$7$FG[I[$7$?$$$H$-$O!"\e(B
+\e$B7@Ls=q$NBh\e(B 6 \e$B9`$K5-=R$5$l$F$$$k$h$&$K!"J8=q$K7@Ls=q$NJ#<L$rIU2C$9$k$3$H\e(B
+\e$B$K$h$C$F!"9T$J$&$3$H$,$G$-$^$9!#\e(B
@end ifnottex
@tex
Invariant Sections being none, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
license is included in the section entitled ``GNU Free Documentation
-License''.
+License'' in the Emacs manual.
\e$B$3$NJ8=q$r!"%U%j!<%=%U%H%&%'%":bCDH/9T$N\e(B GNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q\e(B
\e$BBh\e(B 1.1 \e$BHG$^$?$O$=$l0J9_$NHG$,Dj$a$k>r7o$N2<$GJ#@=!"G[I[!"$"$k$$$OJQ99$9\e(B
\e$B$k$3$H$r5v2D$9$k!#JQ99IT2DItJ,$O;XDj$7$J$$!#!V\e(BA GNU Manual\e$B!W$OI=I=;f%F\e(B
\e$B%-%9%H!"0J2<$N\e(B (a) \e$B$ON"I=;f%F%-%9%H$G$"$k!#$3$NMxMQ5vBz7@Ls=q$NJ#<L$O\e(B
-\e$B!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$H$$$&>O$K4^$^$l$F$$$k!#\e(B
+\e$B!V\e(BEmacs manual\e$B!W$N!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$H$$$&>O$K4^$^$l$F$$$k!#\e(B
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
this GNU Manual, like GNU software. Copies published by the Free
\e$B$N$h$&$KJ#@=$7$?$jJQ99$9$k<+M3$,$"$k!#J#@=$O%U%j!<%=%U%H%&%'%":bCD$K$h$C\e(B
\e$B$F=PHG$5$l$?!#\e(B(\e$B%U%j!<%=%U%H%&%'%":bCD$O\e(B) GNU \e$B$N3+H/$N$?$a$KI,MW$J;q6b$r\e(B
\e$B=8$a$F$$$k!#!W\e(B
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+
+\e$B$3$NJ8=q$O!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$K4p$E$$$FG[I[$5$l$?<}=8Cx:nJ*\e(B
+\e$B$N0lIt$G$9!#$b$7$"$J$?$,$3$NJ8=q$r<}=8Cx:nJ*$+$iJ,N%$7$FG[I[$7$?$$$H$-$O!"\e(B
+\e$B7@Ls=q$NBh\e(B 6 \e$B9`$K5-=R$5$l$F$$$k$h$&$K!"J8=q$K7@Ls=q$NJ#<L$rIU2C$9$k$3$H\e(B
+\e$B$K$h$C$F!"9T$J$&$3$H$,$G$-$^$9!#\e(B
@end titlepage
@page
\e$B$K9g$&$h$&$J@55,I=8=$K@_Dj$9$k$G$7$g$&!#;d<+?H$O!"$=$N$h$&$J5,3J$K=>$o$J\e(B
\e$B$$%a!<%k$O$?$@<N$F5n$C$F$$$k$@$1$G$9!#\e(B
+@item message-alternative-emails
+@vindex message-alternative-emails
+A regexp to match the alternative email addresses. The first matched
+address (not primary one) is used in the @code{From} field.
+\e$BBe$o$j$N%a!<%k%"%I%l%9$K9gCW$9$k@55,I=8=$G$9!#:G=i$K%^%C%A$7$?\e(B (\e$BBh0l5A$G\e(B
+\e$B$O$J$$\e(B) \e$B%"%I%l%9$,\e(B @code{From} \e$B%U%#!<%k%I$G;H$o$l$^$9!#\e(B
+(\e$BLuCm\e(B: To \e$B$+\e(B Cc \e$B$K$"$k%"%I%l%9$G!":G=i$K$3$N@55,I=8=$K9gCW$7!"\e(B
+\e$B$+$D\e(B @code{user-mail-address} \e$B$H$O0c$&$b$N$,!"\e(B@code{From} \e$B%U%#!<%k%I$N%a!<\e(B
+\e$B%k%"%I%l%9$H$7$F;H$o$l$^$9!#\e(B)
+
@end table
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being none, with the Front-Cover texts being ``A GNU
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
license is included in the section entitled ``GNU Free Documentation
-License''.
+License'' in the Emacs manual.
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
this GNU Manual, like GNU software. Copies published by the Free
Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
@end ifnottex
@tex
Invariant Sections being none, with the Front-Cover texts being ``A GNU
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
license is included in the section entitled ``GNU Free Documentation
-License''.
+License'' in the Emacs manual.
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
this GNU Manual, like GNU software. Copies published by the Free
Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
@end titlepage
@page
set this variable to a regexp that matches these prefixes. Myself, I
just throw away non-compliant mail.
+@item message-alternative-emails
+@vindex message-alternative-emails
+A regexp to match the alternative email addresses. The first matched
+address (not primary one) is used in the @code{From} field.
+
@end table