+Sat Dec 5 18:35:42 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Pterodactyl Gnus v0.64 is released.
+
+1998-12-05 18:51:13 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * mm-view.el (mm-setup-w3): Don't load.
+
+ * gnus-msg.el (gnus-setup-message): Set group name.
+ (gnus-group-mail): Avoid leaking local vars.
+
+ * message.el (message-attach-file): Renamed.
+ (message-mime-attach-file): Renamed again.
+
+1998-12-05 Hrvoje Niksic <hniksic@srce.hr>
+
+ * gnus-art.el (article-decode-encoded-words): Bind
+ rfc2047-default-charset here.
+
+ * gnus-art.el (gnus-insert-mime-button): Nix slashes in file name.
+
+1998-12-05 18:33:27 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-picon.el (gnus-picons-setup-buffer): Run picons hook.
+ (gnus-picons-setup-hook): New hook.
+
+1998-12-05 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * mailcap.el (mailcap-mime-data): Remove "*" from documentation
+ string.
+ (mailcap-mime-extensions): Ditto. Made first sentense fit a
+ line.
+
+1998-12-05 17:11:04 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-article-prepare-display): Setup w3.
+ (gnus-mime-view-part): Ditto.
+ (gnus-mime-inline-part): Dotii.
+ (gnus-mime-externalize-part): Daddo.
+ (gnus-mime-internalize-part): Tutti frutti.
+ (gnus-widget-press-button): Da da do.
+
+ * mm-view.el (mm-setup-w3): Require url-vars.
+
+Fri Dec 4 12:13:12 1998 Shenghuo ZHU <zsh@cs.rochester.edu>
+
+ * message.el (message-draft-coding-system): Fix for XEmacs-NT.
+ * mm-util.el (mm-find-charset-region): Ditto.
+
+1998-12-05 16:30:01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-send): Don't encode here.
+ (message-send-mail): But here.
+ (message-send-news): And here.
+
+1998-12-04 15:29:02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-msg.el (gnus-message-insert-stylings): Don't insert twice.
+
Fri Dec 4 04:09:15 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Pterodactyl Gnus v0.63 is released.
(forward-line 1))))))
(defun article-treat-dumbquotes ()
- "Translate M******** sm*rtq**t*s into proper text."
+ "Translate M******** sm*rtq**t*s into proper text.
+Note that this function guesses whether a character is a sm*rtq**t* or
+not, so it should only be used interactively."
(interactive)
(article-translate-strings gnus-article-dumbquotes-map))
(defun article-decode-encoded-words ()
"Remove encoded-word encoding from headers."
- (let ((inhibit-point-motion-hooks t) buffer-read-only)
+ (let ((inhibit-point-motion-hooks t)
+ (rfc2047-default-charset gnus-newsgroup-default-charset)
+ buffer-read-only)
(save-restriction
(message-narrow-to-head)
(funcall gnus-decode-header-function (point-min) (point-max)))))
(gnus-run-hooks 'gnus-tmp-internal-hook)
(gnus-run-hooks 'gnus-article-prepare-hook)
(when gnus-display-mime-function
+ (mm-setup-w3)
(let ((url-standalone-mode (not gnus-plugged)))
(funcall gnus-display-mime-function)))
;; Perform the article display hooks.
"Interactively choose a view method for the MIME part under point."
(interactive)
(gnus-article-check-buffer)
+ (mm-setup-w3)
(let ((data (get-text-property (point) 'gnus-data))
(url-standalone-mode (not gnus-plugged)))
(mm-interactively-view-part data)))
"Insert the MIME part under point into the current buffer."
(interactive "P") ; For compatibility reasons we are not using "z".
(gnus-article-check-buffer)
+ (mm-setup-w3)
(let* ((data (get-text-property (point) 'gnus-data))
contents
(url-standalone-mode (not gnus-plugged))
"View the MIME part under point with an external viewer."
(interactive)
(gnus-article-check-buffer)
+ (mm-setup-w3)
(let* ((handle (or handle (get-text-property (point) 'gnus-data)))
(url-standalone-mode (not gnus-plugged))
(mm-user-display-methods nil)
"View the MIME part under point with an internal viewer."
(interactive)
(gnus-article-check-buffer)
+ (mm-setup-w3)
(let* ((handle (or handle (get-text-property (point) 'gnus-data)))
(url-standalone-mode (not gnus-plugged))
(mm-user-display-methods '((".*" . inline)))
(gnus-tmp-length (with-current-buffer (mm-handle-buffer handle)
(buffer-size)))
gnus-tmp-type-long b e)
+ (when (string-match ".*/" gnus-tmp-name)
+ (setq gnus-tmp-name (replace-match "" t t gnus-tmp-name)))
(setq gnus-tmp-type-long (concat gnus-tmp-type
(and (not (equal gnus-tmp-name ""))
(concat "; " gnus-tmp-name))))
(defun gnus-widget-press-button (elems el)
(goto-char (widget-get elems :from))
+ (mm-setup-w3)
(let ((url-standalone-mode (not gnus-plugged)))
(gnus-article-press-button)))
(viewer . tar-mode)
(type . "archive/tar")
(test . (fboundp 'tar-mode)))))
- "*The mailcap structure is an assoc list of assoc lists.
+ "The mailcap structure is an assoc list of assoc lists.
1st assoc list is keyed on the major content-type
2nd assoc list is keyed on the minor content-type (which can be a regexp)
(downcase-region name-pos (point))
(setq name (buffer-substring name-pos (point)))
(skip-chars-forward " \t\n")
- (if (not (eq (or (char-after (point)) 0) ?=)) ; There is no value
+ (if (not (eq (char-after (point)) ?=)) ; There is no value
(setq value nil)
(skip-chars-forward " \t\n=")
(setq val-pos (point))
(error (goto-char (point-max)))))
(while (not done)
(skip-chars-forward "^;")
- (if (eq (or (char-after (1- (point))) 0) ?\\ )
+ (if (eq (char-after (1- (point))) ?\\ )
(progn
(subst-char-in-region (1- (point)) (point) ?\\ ? )
(skip-chars-forward ";"))
(".wav" . "audio/x-wav")
(".wrl" . "x-world/x-vrml")
(".xbm" . "image/xbm")
- (".xpm" . "image/x-pixmap")
+ (".xpm" . "image/xpm")
(".xwd" . "image/windowdump")
(".zip" . "application/zip")
(".ai" . "application/postscript")
(".jpe" . "image/jpeg")
(".jpeg" . "image/jpeg"))
- "*An assoc list of file extensions and the MIME content-types they
-correspond to.")
+ "An assoc list of file extensions and corresponding MIME content-types.")
(defun mailcap-parse-mimetypes (&optional path)
;; Parse out all the mimetypes specified in a unix-style path string PATH
(setq gnus-message-buffer (current-buffer))
(set (make-local-variable 'gnus-message-group-art)
(cons ,group ,article))
- (make-local-variable 'gnus-newsgroup-name)
+ (set (make-local-variable 'gnus-newsgroup-name) ,group)
(gnus-run-hooks 'gnus-message-setup-hook))
(gnus-add-buffer)
(gnus-configure-windows ,config t)
If ARG, use the group under the point to find a posting style.
If ARG is 1, prompt for a group name to find the posting style."
(interactive "P")
- (let ((gnus-newsgroup-name
- (if arg
- (if (= 1 (prefix-numeric-value arg))
- (completing-read "Use posting style of group: "
- gnus-active-hashtb nil
- (gnus-read-active-file-p))
- (gnus-group-group-name))
- "")))
- (gnus-setup-message 'message (message-mail))))
+ ;; We can't `let' gnus-newsgroup-name here, since that leads
+ ;; to local variables leaking.
+ (let ((group gnus-newsgroup-name)
+ (buffer (current-buffer)))
+ (unwind-protect
+ (progn
+ (setq gnus-newsgroup-name
+ (if arg
+ (if (= 1 (prefix-numeric-value arg))
+ (completing-read "Use posting style of group: "
+ gnus-active-hashtb nil
+ (gnus-read-active-file-p))
+ (gnus-group-group-name))
+ ""))
+ (gnus-setup-message 'message (message-mail)))
+ (save-excursion
+ (set-buffer buffer)
+ (setq gnus-newsgroup-name group)))))
(defun gnus-group-post-news (&optional arg)
"Start composing a news message.
;; If the group has a posting-style parameter, add it at the end with a
;; regexp matching everything, to be sure it takes precedence over all
;; the others.
- (unless (eq 0 (length gnus-newsgroup-name))
- (let ((tmp-style (gnus-group-find-parameter gnus-newsgroup-name
- 'posting-style t)))
- (and tmp-style
- (setq styles (append styles (list (cons ".*" tmp-style)))))
- ))
+ (unless (zerop (length gnus-newsgroup-name))
+ (let ((tmp-style (gnus-group-find-parameter
+ gnus-newsgroup-name 'posting-style t)))
+ (when tmp-style
+ (setq styles (append styles (list (cons ".*" tmp-style)))))))
;; Go through all styles and look for matches.
(while styles
(setq style (pop styles)
match (pop style))
- (when (cond ((stringp match)
- ;; Regexp string match on the group name.
- (string-match match gnus-newsgroup-name))
- ((or (symbolp match)
- (gnus-functionp match))
- (cond ((gnus-functionp match)
- ;; Function to be called.
- (funcall match))
- ((boundp match)
- ;; Variable to be checked.
- (symbol-value match))))
- ((listp match)
- ;; This is a form to be evaled.
- (eval match)))
+ (when (cond
+ ((stringp match)
+ ;; Regexp string match on the group name.
+ (string-match match gnus-newsgroup-name))
+ ((or (symbolp match)
+ (gnus-functionp match))
+ (cond
+ ((gnus-functionp match)
+ ;; Function to be called.
+ (funcall match))
+ ((boundp match)
+ ;; Variable to be checked.
+ (symbol-value match))))
+ ((listp match)
+ ;; This is a form to be evaled.
+ (eval match)))
;; We have a match, so we set the variables.
(while style
(setq attribute (pop style)
(message "Couldn't find attribute %s" (car attribute))
;; We get the value.
(setq value-value
- (cond ((stringp value)
- value)
- ((or (symbolp value)
- (gnus-functionp value))
- (cond ((gnus-functionp value)
- (funcall value))
- ((boundp value)
- (symbol-value value))))
- ((listp value)
- (eval value))))
+ (cond
+ ((stringp value)
+ value)
+ ((or (symbolp value)
+ (gnus-functionp value))
+ (cond ((gnus-functionp value)
+ (funcall value))
+ ((boundp value)
+ (symbol-value value))))
+ ((listp value)
+ (eval value))))
(if variable
;; This is an ordinary variable.
(set (make-local-variable variable) value-value)
(while (setq val (pop gnus-message-style-insertions))
(when (cdr val)
(insert (car val) ": " (cdr val) "\n"))
- (gnus-pull (car val) gnus-message-style-insertions)))))
+ (gnus-pull (car val) gnus-message-style-insertions t)))))
;;; Allow redefinition of functions.
"Face to show xbm picons in."
:group 'picons)
+(defcustom gnus-picons-setup-hook nil
+ "Hook run in Picons buffers."
+ :group 'picons
+ :type 'hook)
+
;;; Internal variables:
(defvar gnus-picons-processes-alist nil
(defun gnus-get-buffer-name (variable)
"Returns the buffer name associated with the contents of a variable."
- (let ((buf (gnus-get-buffer-create (gnus-window-to-buffer-helper
- (cdr
- (assq variable gnus-window-to-buffer))))))
+ (let ((buf (gnus-get-buffer-create
+ (gnus-window-to-buffer-helper
+ (cdr (assq variable gnus-window-to-buffer))))))
(and buf
(buffer-name buf))))
(defun gnus-picons-kill-buffer ()
(let ((buf (get-buffer (gnus-picons-buffer-name))))
- (if (buffer-live-p buf)
- (kill-buffer buf))))
+ (when (buffer-live-p buf)
+ (kill-buffer buf))))
(defun gnus-picons-setup-buffer ()
(let ((name (gnus-picons-buffer-name)))
(set-buffer (gnus-get-buffer-create name))
(buffer-disable-undo)
(setq buffer-read-only t)
+ (run-hooks 'gnus-picons-setup-hook)
(add-hook 'gnus-summary-prepare-exit-hook 'gnus-picons-kill-buffer))
(current-buffer))))
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "0.63"
+(defconst gnus-version-number "0.64"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Pterodactyl Gnus v%s" gnus-version-number)
"Coding system to encode outgoing mail.")
(defvar message-draft-coding-system
- (if (string-match "XEmacs\\|Lucid" emacs-version)
- 'escape-quoted 'emacs-mule)
+ (cond
+ ((not (fboundp 'coding-system-p)) nil)
+ ((coding-system-p 'emacs-mule) 'emacs-mule)
+ ((coding-system-p 'escape-quoted) 'escape-quoted)
+ ((coding-system-p 'no-conversion) 'no-conversion)
+ (t nil))
"Coding system to compose mail.")
(defvar message-default-charset 'iso-8859-1
(define-key message-mode-map "\C-c\C-z" 'message-kill-to-signature)
(define-key message-mode-map "\M-\r" 'message-newline-and-reformat)
- (define-key message-mode-map "\C-c\C-a" 'message-insert-mime-part)
- (define-key message-mode-map "\C-c\C-m\C-a" 'message-insert-mime-part)
+ (define-key message-mode-map "\C-c\C-a" 'message-mime-attach-file)
+ (define-key message-mode-map "\C-c\C-m\C-a" 'message-mime-attach-file)
(define-key message-mode-map "\C-c\C-m\C-e" 'message-mime-insert-external)
(define-key message-mode-map "\C-c\C-m\C-q" 'mml-quote-region)
(let ((inhibit-read-only t))
(put-text-property (point-min) (point-max) 'read-only nil))
(message-fix-before-sending)
- (message-encode-message-body)
(run-hooks 'message-send-hook)
(message "Sending...")
(let ((alist message-send-method-alist)
(message-do-fcc)
;;(when (fboundp 'mail-hist-put-headers-into-history)
;; (mail-hist-put-headers-into-history))
- (run-hooks 'message-sent-hook)
+ (save-excursion
+ (run-hooks 'message-sent-hook))
(message "Sending...done")
;; Mark the buffer as unmodified and delete auto-save.
(set-buffer-modified-p nil)
(mail-encode-encoded-word-buffer)
;; Let the user do all of the above.
(run-hooks 'message-header-hook))
+ (message-encode-message-body)
(unwind-protect
(save-excursion
(set-buffer tembuf)
(mail-encode-encoded-word-buffer)
;; Let the user do all of the above.
(run-hooks 'message-header-hook))
+ (message-encode-message-body)
(message-cleanup-headers)
(if (not (message-check-news-syntax))
nil
;; I really think this function should be renamed. It is only useful
;; for inserting file attachments.
-(defun message-insert-mime-part (file type description)
+(defun message-mime-attach-file (file type description)
"Attach a file to the outgoing MIME message.
The file is not inserted or encoded until you send the message with
`\\[message-send-and-exit]' or `\\[message-send]'.
"Return a list of charsets in the region."
(cond
((and (boundp 'enable-multibyte-characters)
- enable-multibyte-characters)
+ enable-multibyte-characters
+ (fboundp 'find-charset-region))
(find-charset-region b e))
((not (boundp 'current-language-environment))
(save-excursion
(w3-do-setup)
(require 'url)
(require 'w3-vars)
- (condition-case ()
- (load "url-misc.el")
- (error nil))
+ (require 'url-vars)
(setq mm-w3-setup t)))
(defun mm-inline-text (handle)
-@echo off\r
-\r
-rem Written by David Charlap <shamino@writeme.com>\r
-\r
-rem There are two catches, however. The emacs.bat batch file may not exist\r
-rem in all distributions. It is part of the Voelker build of Emacs 19.34\r
-rem (http://www.cs.washington.edu/homes/voelker/ntemacs.html). If the user\r
-rem installs Gnus with some other build, he may have to replace calls to\r
-rem %1\emacs.bat with something else.\r
-rem \r
-rem Also, the emacs.bat file that Voelker ships does not accept more than 9\r
-rem parameters, so the attempts to compile the .texi files will fail. To\r
-rem fix that (at least on NT. I don't know about Win95), the following\r
-rem change should be made to emacs.bat:\r
-rem \r
-rem %emacs_dir%\bin\emacs.exe %1 %2 %3 %4 %5 %6 %7 %8 %9\r
-rem \r
-rem should become\r
-rem \r
-rem %emacs_dir%\bin\emacs.exe %*\r
-rem \r
-rem which will allow the batch file to accept an unlimited number of\r
-rem parameters.\r
-\r
-rem Clear PWD so emacs doesn't get confused\r
-set GNUS_PWD_SAVE=%PWD%\r
-set PWD=\r
-\r
-if "%1" == "" goto usage\r
-\r
-cd lisp\r
-call %1\bin\emacs.bat -batch -q -no-site-file -l ./dgnushack.el -f dgnushack-compile\r
-if not "%2" == "copy" goto info\r
-copy *.el* %1\lisp\r
-\r
-:info\r
-cd ..\texi\r
-call %1\bin\emacs.bat -batch -q -no-site-file gnus.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer\r
-call %1\bin\emacs.bat -batch -q -no-site-file message.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer\r
-if not "%2" == "copy" goto done\r
-copy gnus %1\info\r
-copy gnus-?? %1\info\r
-copy message %1\info\r
-\r
-:etc\r
-cd ..\etc\r
-copy gnus-tut.txt %1\etc\r
-\r
-:done\r
-cd ..\r
-goto end\r
-\r
-:usage\r
-echo Usage: make ^<emacs-dir^> [copy]\r
-echo.\r
-echo where: ^<emacs-dir^> is the directory you installed emacs in\r
-echo eg. d:\emacs\19.34\r
-echo copy indicates that the compiled files should be copied to your\r
-echo emacs lisp, info, and etc directories\r
-\r
-rem Restore PWD so whoever called this batch file doesn't get confused\r
-set PWD=%GNUS_PWD_SAVE%\r
-set GNUS_PWD_SAVE=\r
-:end\r
+@echo off
+
+rem Written by David Charlap <shamino@writeme.com>
+
+rem There are two catches, however. The emacs.bat batch file may not exist
+rem in all distributions. It is part of the Voelker build of Emacs 19.34
+rem (http://www.cs.washington.edu/homes/voelker/ntemacs.html). If the user
+rem installs Gnus with some other build, he may have to replace calls to
+rem %1\emacs.bat with something else.
+rem
+rem Also, the emacs.bat file that Voelker ships does not accept more than 9
+rem parameters, so the attempts to compile the .texi files will fail. To
+rem fix that (at least on NT. I don't know about Win95), the following
+rem change should be made to emacs.bat:
+rem
+rem %emacs_dir%\bin\emacs.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
+rem
+rem should become
+rem
+rem %emacs_dir%\bin\emacs.exe %*
+rem
+rem which will allow the batch file to accept an unlimited number of
+rem parameters.
+
+rem Clear PWD so emacs doesn't get confused
+set GNUS_PWD_SAVE=%PWD%
+set PWD=
+
+if "%1" == "" goto usage
+
+cd lisp
+call %1\bin\emacs.bat -batch -q -no-site-file -l ./dgnushack.el -f dgnushack-compile
+if not "%2" == "copy" goto info
+copy *.el* %1\lisp
+
+:info
+cd ..\texi
+call %1\bin\emacs.bat -batch -q -no-site-file gnus.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
+call %1\bin\emacs.bat -batch -q -no-site-file message.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
+if not "%2" == "copy" goto done
+copy gnus %1\info
+copy gnus-?? %1\info
+copy message %1\info
+
+:etc
+cd ..\etc
+copy gnus-tut.txt %1\etc
+
+:done
+cd ..
+goto end
+
+:usage
+echo Usage: make ^<emacs-dir^> [copy]
+echo.
+echo where: ^<emacs-dir^> is the directory you installed emacs in
+echo eg. d:\emacs\19.34
+echo copy indicates that the compiled files should be copied to your
+echo emacs lisp, info, and etc directories
+
+rem Restore PWD so whoever called this batch file doesn't get confused
+set PWD=%GNUS_PWD_SAVE%
+set GNUS_PWD_SAVE=
+:end
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Pterodactyl Gnus 0.63 Manual
+@settitle Pterodactyl Gnus 0.64 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Pterodactyl Gnus 0.63 Manual
+@title Pterodactyl Gnus 0.64 Manual
@author by Lars Magne Ingebrigtsen
@page
spool or your mbox file. All at the same time, if you want to push your
luck.
-This manual corresponds to Pterodactyl Gnus 0.63.
+This manual corresponds to Pterodactyl Gnus 0.64.
@end ifinfo
@cindex Latin 1
Treat M******** sm*rtq**t*s according to
@code{gnus-article-dumbquotes-map}
-(@code{gnus-article-treat-dumbquotes}).
+(@code{gnus-article-treat-dumbquotes}). Note that this function guesses
+whether a character is a sm*rtq**t* or not, so it should only be used
+interactively.
@item W w
@kindex W w (Summary)
Ordered list of suffixes on picon file names to try. Defaults to
@code{("xpm" "gif" "xbm")} minus those not builtin your XEmacs.
+@item gnus-picons-setup-hook
+@vindex gnus-picons-setup-hook
+Hook run in the picon buffer, if that is displayed.
+
@item gnus-picons-display-article-move-p
@vindex gnus-picons-display-article-move-p
Whether to move point to first empty line when displaying picons. This
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Pterodactyl Message 0.63 Manual
+@settitle Pterodactyl Message 0.64 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Pterodactyl Message 0.63 Manual
+@title Pterodactyl Message 0.64 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Pterodactyl Message 0.63. Message is
+This manual corresponds to Pterodactyl Message 0.64. Message is
distributed with the Gnus distribution bearing the same version number
as this manual.