1998-09-11 Katsumi Yamaoka <yamaoka@jpl.org>
+ * lisp/gnus.el (gnus-version-number): Update to 6.10.018.
+
+ * Sync up with Pterodactyl Gnus 0.26.
+
+1998-09-11 Katsumi Yamaoka <yamaoka@jpl.org>
+
* lisp/gnus.el (gnus-version-number): Update to 6.10.017.
* lisp/gnus-art.el (gnus-show-mime) (gnus-summary-toggle-mime):
+Fri Sep 11 12:32:50 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Pterodactyl Gnus v0.26 is released.
+
+1998-09-11 08:25:33 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * mm-decode.el (mm-interactively-view-part): New function.
+
+ * gnus-art.el (gnus-mime-view-part): New command.
+
+ * mm-decode.el (mm-last-shell-command): New variable.
+
+ * mailcap.el (mailcap-mime-info): Allow returning all matches.
+
+ * mm-decode.el (mm-save-part): New function.
+
+ * gnus-art.el (article-decode-charset): Protect against buggy
+ content-types.
+ (gnus-mime-pipe-part): New command.
+ (gnus-mime-save-part): New command.
+ (gnus-mime-button-map): New keymap.
+ (gnus-mime-button-line-format): New variable.
+ (gnus-insert-mime-button): New function.
+ (gnus-display-mime): Use it.
+
+ * gnus-util.el (gnus-dd-mmm): Removed length spec.
+
+ * mm-decode.el (mm-inline-text): Decode charsets.
+
+ * gnus-art.el (gnus-article-save): Comment fix.
+
+ * gnus-int.el (gnus-start-news-server): When in batch, don't
+ prompt.
+
+ * gnus-cache.el (gnus-cache-possibly-enter-article): Don't
+ decode.
+
+ * mm-decode.el (mm-inline-media-tests): Add audio.
+ (mm-inline-audio): New function.
+
+1998-09-11 08:19:22 Katsumi Yamaoka <yamaoka@ga.sony.co.jp>
+
+ * gnus-art.el (article-make-date-line): Didn't work.
+
+ * parse-time.el (parse-time-string): One too many nils.
+
Fri Sep 11 08:09:40 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Pterodactyl Gnus v0.25 is released.
(if (not gnus-default-article-saver)
(error "No default saver is defined")
;; !!! Magic! The saving functions all save
- ;; `gnus-original-article-buffer' (or so they think), but we
+ ;; `gnus-save-article-buffer' (or so they think), but we
;; bind that variable to our save-buffer.
(set-buffer gnus-article-buffer)
(let* ((gnus-save-article-buffer save-buffer)
t ; The article already is saved.
(save-excursion
(set-buffer nntp-server-buffer)
- (let ((gnus-use-cache nil))
+ (let ((gnus-use-cache nil)
+ (gnus-article-decode-hook nil))
(gnus-request-article-this-buffer number group))
(when (> (buffer-size) 0)
(let ((coding-system-for-write
;; gnus-open-server-hook might have opened it
(gnus-server-opened gnus-select-method)
(gnus-open-server gnus-select-method)
+ gnus-batch-mode
(gnus-y-or-n-p
(format
"%s (%s) open error: '%s'. Continue? "
(t nil))))
(defun mailcap-mime-info (string &optional request)
- "Get the mime viewer command for HEADERLINE, return nil if none found.
-Expects a complete content-type header line as its argument. This can
-be simple like text/html, or complex like text/plain; charset=blah; foo=bar
+ "Get the MIME viewer command for STRING, return nil if none found.
+Expects a complete content-type header line as its argument.
Second argument REQUEST specifies what information to return. If it is
nil or the empty string, the viewer (second field of the mailcap
entry) will be returned. If it is a string, then the mailcap field
corresponding to that string will be returned (print, description,
whatever). If a number, then all the information for this specific
-viewer is returned."
+viewer is returned. If `all', then all possible viewers for
+this type is returned."
(let (
major ; Major encoding (text, etc)
minor ; Minor encoding (html, etc)
(if (or (string= request "test") (string= request "viewer"))
(mailcap-unescape-mime-test
(cdr-safe (assoc request viewer)) info)))
+ ((eq request 'all)
+ passed)
(t
;; MUST make a copy *sigh*, else we modify mailcap-mime-data
(setq viewer (copy-tree viewer))
number dependencies force-new))))
(push header headers))
(forward-line 1))
- ;(error
- ; (gnus-error 4 "Strange nov line (%d)"
- ; (count-lines (point-min) (point))))
- )
+ (error
+ (gnus-error 4 "Strange nov line (%d)"
+ (count-lines (point-min) (point)))))
(forward-line 1))
;; A common bug in inn is that if you have posted an article and
;; then retrieves the active file, it will answer correctly --
(defun gnus-dd-mmm (messy-date)
"Return a string like DD-MMM from a big messy string."
- (format-time-string "%2d-%b" (safe-date-to-time messy-date)))
+ (format-time-string "%d-%b" (safe-date-to-time messy-date)))
(defmacro gnus-date-get-time (date)
"Convert DATE string to Emacs time.
(defconst gnus-product-name "T-gnus"
"Product name of this version of gnus.")
-(defconst gnus-version-number "6.10.017"
+(defconst gnus-version-number "6.10.018"
"Version number for this version of gnus.")
-(defconst gnus-original-version-number "0.25"
+(defconst gnus-original-version-number "0.26"
"Version number for this version of Gnus.")
(defconst gnus-original-product-name "Pterodactyl Gnus"
-
;;; message.el --- composing mail and news messages
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
(unless (bolp)
(insert "\n"))
;; Delete all invisible text.
- (when (text-property-any (point-min) (point-max) 'invisible t)
- (put-text-property (point-min) (point-max) 'invisible nil)
- (unless (yes-or-no-p "Invisible text found and made visible; continue posting?")
- (error "Invisible text found and made visible"))))
+ (message-check 'invisible-text
+ (when (text-property-any (point-min) (point-max) 'invisible t)
+ (put-text-property (point-min) (point-max) 'invisible nil)
+ (unless (yes-or-no-p "Invisible text found and made visible; continue posting?")
+ (error "Invisible text found and made visible")))))
(defun message-add-action (action &rest types)
"Add ACTION to be performed when doing an exit of type TYPES."
(run-hooks 'message-header-hook))
(message-cleanup-headers)
(if (not (message-check-news-syntax))
- (progn
- ;;(message "Posting not performed")
- nil)
+ nil
(unwind-protect
(save-excursion
(set-buffer tembuf)
("image/tiff" mm-inline-image (featurep 'tiff))
("image/xbm" mm-inline-image (eq (device-type) 'x))
("image/xpm" mm-inline-image (featurep 'xpm))
+ ("image/bmp" mm-inline-image (featurep 'bmp))
("text/plain" mm-inline-text t)
("text/html" mm-inline-text (featurep 'w3))
- )
+ ("audio/wav" mm-inline-audio
+ (and (or (featurep 'nas-sound) (featurep 'native-sound))
+ (device-sound-enabled-p)))
+ ("audio/au" mm-inline-audio
+ (and (or (featurep 'nas-sound) (featurep 'native-sound))
+ (device-sound-enabled-p))))
"Alist of media types/test that say whether the media types can be displayed inline.")
(defvar mm-user-display-methods
;;; Internal variables.
(defvar mm-dissection-list nil)
+(defvar mm-last-shell-command "")
(defun mm-dissect-buffer (&optional no-strict-mime)
"Dissect the current buffer and return a list of MIME handles."
((equal type "plain")
(let ((b (point)))
(insert text)
- (setcar
- (nthcdr 3 handle)
- `(lambda ()
- (let (buffer-read-only)
- (delete-region ,(set-marker (make-marker) b)
- ,(set-marker (make-marker) (point)))))))))))
-
-
+ (save-restriction
+ (narrow-to-region b (point))
+ (let ((charset (drums-content-type-get (nth 1 handle) 'charset)))
+ (when charset
+ (mm-decode-body charset nil)))
+ (setcar
+ (nthcdr 3 handle)
+ `(lambda ()
+ (let (buffer-read-only)
+ (delete-region ,(set-marker (make-marker) (point-min))
+ ,(set-marker (make-marker) (point-max)))))))))
+ )))
+
+(defun mm-inline-audio (handle)
+ (message "Not implemented"))
+
+;;;
+;;; Functions for outputting parts
+;;;
+
+(defun mm-save-part (handle)
+ "Write HANDLE to a file."
+ (let* ((name (drums-content-type-get (cadr handle) 'name))
+ (file (read-file-name "Save MIME part to: "
+ (expand-file-name
+ (or name "") default-directory))))
+ (mm-with-unibyte-buffer
+ (insert-buffer-substring (car handle))
+ (mm-decode-content-transfer-encoding (nth 2 handle))
+ (when (or (not (file-exists-p file))
+ (yes-or-no-p (format "File %s already exists; overwrite? ")))
+ (write-region (point-min) (point-max) file)))))
+
+(defun mm-pipe-part (handle)
+ "Pipe HANDLE to a process."
+ (let* ((name (drums-content-type-get (cadr handle) 'name))
+ (command
+ (read-string "Shell command on MIME part: " mm-last-shell-command)))
+ (mm-with-unibyte-buffer
+ (insert-buffer-substring (car handle))
+ (mm-decode-content-transfer-encoding (nth 2 handle))
+ (shell-command-on-region (point-min) (point-max) command nil))))
+
+(defun mm-interactively-view-part (handle)
+ "Display HANDLE using METHOD."
+ (let* ((type (caadr handle))
+ (methods
+ (mapcar (lambda (i) (list (cdr (assoc "viewer" i))))
+ (mailcap-mime-info type 'all)))
+ (method (completing-read "Viewer: " methods)))
+ (mm-display-external (copy-sequence handle) method)))
+
(provide 'mm-decode)
;; mm-decode.el ends here
(and (buffer-name ,temp-buffer)
(kill-buffer ,temp-buffer))
(setq-default enable-multibyte-characters ,multibyte))))))
+(put 'mm-with-unibyte-buffer 'lisp-indent-function 0)
+(put 'mm-with-unibyte-buffer 'edebug-form-spec '(body))
+
(provide 'mm-util)
(deffoo nnagent-request-post (&optional server)
(gnus-agent-insert-meta-information 'news gnus-command-method)
- (gnus-request-accept-article "nndraft:queue"))
+ (gnus-request-accept-article "nndraft:queue" nil t t))
;; Use nnml functions for just about everything.
(nnoo-import nnagent
+1998-09-11 08:52:50 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Group Score Commands): Fix.
+ (Saving Articles): Fix.
+ (Agent Expiry): Fix.
+
1998-09-10 03:19:14 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Windows Configuration): Addition.
\input texinfo @c -*-texinfo-*-
@setfilename gnus-ja
-@settitle Semi-gnus 6.10.017 Manual
+@settitle Semi-gnus 6.10.018 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Semi-gnus 6.10.017 Manual
+@title Semi-gnus 6.10.018 Manual
@author by Lars Magne Ingebrigtsen
@author by members of Semi-gnus mailing-list
\e$B$J8@8l7w$r:9JL$7$^$;$s!#$"$"!"%/%j%s%4%s$NJ}$O\e(B Unicode Next Generation\e$B$r\e(B
\e$B$*BT$A$/$@$5$$!#\e(B
-\e$B$3$N@bL@=q$O\e(B Semi-gnus 6.10.017 \e$B$KBP1~$7$^$9!#\e(B
+\e$B$3$N@bL@=q$O\e(B Semi-gnus 6.10.018 \e$B$KBP1~$7$^$9!#\e(B
@end ifinfo
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Semi-gnus 6.10.017 Manual
+@settitle Semi-gnus 6.10.018 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Semi-gnus 6.10.017 Manual
+@title Semi-gnus 6.10.018 Manual
@author by Lars Magne Ingebrigtsen
@page
API. So Semi-gnus does not discriminate various language communities.
Oh, if you are a Klingon, please wait Unicode Next Generation.
-This manual corresponds to Semi-gnus 6.10.017.
+This manual corresponds to Semi-gnus 6.10.018.
@end ifinfo
@node Agent Expiry
@subsection Agent Expiry
-@vindex gnus-agent-expiry-days
-@findex gnus-agent-expiry
-@kindex M-x gnus-agent-expiry
+@vindex gnus-agent-expire-days
+@findex gnus-agent-expire
+@kindex M-x gnus-agent-expire
@cindex Agent expiry
@cindex Gnus Agent expiry
@cindex expiry
@code{nnagent} doesn't handle expiry. Instead, there's a special
-@code{gnus-agent-expiry} command that will expire all read articles that
-are older than @code{gnus-agent-expiry-days} days. It can be run
+@code{gnus-agent-expire} command that will expire all read articles that
+are older than @code{gnus-agent-expire-days} days. It can be run
whenever you feel that you're running out of space. It's not
particularly fast or efficient, and it's not a particularly good idea to
interrupt it (with @kbd{C-g} or anything else) once you've started it.
@findex gnus-batch-score
@cindex batch scoring
@example
-$ emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score
+$ emacs -batch -l ~/.emacs -l ~/.gnus.el -f gnus-batch-score
@end example
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Pterodactyl Message 0.25 Manual
+@settitle Pterodactyl Message 0.26 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Pterodactyl Message 0.25 Manual
+@title Pterodactyl Message 0.26 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Pterodactyl Message 0.25. Message is
+This manual corresponds to Pterodactyl Message 0.26. Message is
distributed with the Gnus distribution bearing the same version number
as this manual.
something only moderators should include.
@item empty
Check whether the article is empty.
+@item invisible-text
+Check whether there is any invisible text in the buffer.
@item empty-headers
Check whether any of the headers are empty.
@item existing-newsgroups