+2000-04-20 16:35:41 Shenghuo ZHU <zsh@cs.rochester.edu>
+
+ * mm-uu.el (mm-uu-dissect): Check forwarded message.
+
+2000-04-20 21:17:48 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-request-article-this-buffer): Allow
+ re-selecting referenced articles.
+
+ * message.el (message-cancel-news): Allow editing.
+ (message-cancel-message): Add newline.
+
+2000-04-20 21:03:54 William M. Perry <wmperry@aventail.com>
+
+ * mm-view.el (mm-inline-image-emacs): New function.
+
+2000-04-20 20:44:55 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * mail-source.el (mail-source-delete-incoming): Change default in
+ cvs.
+
+2000-04-20 20:43:34 Kim-Minh Kaplan <kmkaplan@vocatex.fr>
+
+ * gnus-art.el (gnus-mime-view-part-as-type-internal): New
+ function.
+
+2000-04-20 14:45:20 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nnml.el (nnml-request-expire-articles): Use it.
+
+ * nnmail.el (nnmail-expiry-target): New variable.
+ (nnmail-expiry-target-group): New function.
+
+2000-04-20 02:36:31 Emerick Rogul <emerick@cs.bu.edu>
+
+ * message.el (message-forward): Add non-MIME separators.
+
+2000-04-20 02:25:39 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-generate-headers): Respect the syntax check
+ spec.
+
+ * gnus-sum.el (gnus-remove-thread-1): Show thread.
+ (gnus-remove-thread): Don't show all threads.
+
Thu Apr 20 01:39:25 2000 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Pterodactyl Gnus v5.8.4 is released.
(let ((data (get-text-property (point) 'gnus-data)))
(mm-interactively-view-part data)))
-(defun gnus-mime-view-part-as-type ()
+(defun gnus-mime-view-part-as-type-internal ()
+ (gnus-article-check-buffer)
+ (let* ((name (mail-content-type-get
+ (mm-handle-type (get-text-property (point) 'gnus-data))
+ 'name))
+ (def-type (and name (mm-default-file-encoding name))))
+ (and def-type (cons def-type 0))))
+
+(defun gnus-mime-view-part-as-type (mime-type)
"Choose a MIME media type, and view the part as such."
(interactive
- (list (completing-read "View as MIME type: "
- (mapcar 'list (mailcap-mime-types)))))
+ (list (completing-read
+ "View as MIME type: "
+ (mapcar (lambda (i) (list i i)) (mailcap-mime-types))
+ nil nil
+ (gnus-mime-view-part-as-type-internal))))
(gnus-article-check-buffer)
(let ((handle (get-text-property (point) 'gnus-data)))
- (gnus-mm-display-part handle)))
+ (gnus-mm-display-part
+ (mm-make-handle (mm-handle-buffer handle)
+ (cons mime-type (cdr (mm-handle-type handle)))
+ (mm-handle-encoding handle)
+ (mm-handle-undisplayer handle)
+ (mm-handle-disposition handle)
+ (mm-handle-description handle)
+ (mm-handle-cache handle)
+ (mm-handle-id handle)))))
(defun gnus-mime-copy-part (&optional handle)
"Put the the MIME part under point into a new buffer."
(gnus-cache-request-article article group))
'article)
;; Get the article and put into the article buffer.
- ((or (stringp article) (numberp article))
+ ((or (stringp article)
+ (numberp article))
(let ((gnus-override-method gnus-override-method)
(methods (and (stringp article)
gnus-refer-article-method))
(buffer-read-only nil))
(setq methods
(if (listp methods)
- (delq 'current methods)
+ methods
(list methods)))
- (if (and (null gnus-override-method) methods)
- (setq gnus-override-method (pop methods)))
+ (when (and (null gnus-override-method)
+ methods)
+ (setq gnus-override-method (pop methods)))
(while (not result)
+ (when (eq gnus-override-method 'current)
+ (setq gnus-override-method gnus-current-select-method))
(erase-buffer)
(gnus-kill-all-overlays)
(let ((gnus-newsgroup-name group))
(expirable (if (gnus-group-total-expirable-p group)
(cons nil (gnus-list-of-read-articles group))
(assq 'expire (gnus-info-marks info))))
- (expiry-wait (gnus-group-find-parameter group 'expiry-wait)))
+ (expiry-wait (gnus-group-find-parameter group 'expiry-wait))
+ (nnmail-expiry-target
+ (or (gnus-group-find-parameter group 'expiry-target)
+ nnmail-expiry-target)))
(when expirable
(setcdr
expirable
(while thread
(gnus-remove-thread-1 (car thread))
(setq thread (cdr thread))))
- (gnus-summary-show-all-threads)
(gnus-remove-thread-1 thread))))))))
(defun gnus-remove-thread-1 (thread)
(gnus-remove-thread-1 (pop thread)))
(when (setq d (gnus-data-find number))
(goto-char (gnus-data-pos d))
+ (gnus-summary-show-thread)
(gnus-data-remove
number
(- (gnus-point-at-bol)
(list 6 14 2
(string-to-number gnus-revision-number))))
-(defconst gnus-original-version-number "5.8.4"
+(defconst gnus-original-version-number "5.8.5"
"Version number for this version of Gnus.")
(provide 'running-pterodactyl-gnus-0_73-or-later)
:group 'mail-source
:type 'integer)
-(defcustom mail-source-delete-incoming t
+(defcustom mail-source-delete-incoming nil
"*If non-nil, delete incoming files after handling."
:group 'mail-source
:type 'boolean)
:group 'message-insertion
:type 'regexp)
-(defcustom message-cancel-message "I am canceling my own article."
+(defcustom message-cancel-message "I am canceling my own article.\n"
"Message to be inserted in the cancel message."
:group 'message-interface
:type 'string)
(if (listp message-indent-citation-function)
message-indent-citation-function
(list message-indent-citation-function)))))
+ ;; Allow undoing.
+ (undo-boundary)
(goto-char end)
(when (re-search-backward message-signature-separator start t)
;; Also peel off any blank lines before the signature.
;; The element is a symbol. We insert the value
;; of this symbol, if any.
(symbol-value header))
- (t
+ ((not (message-check-element header))
;; We couldn't generate a value for this header,
;; so we just ask the user.
(read-from-minibuffer
cur)))
;;;###autoload
-(defun message-cancel-news ()
- "Cancel an article you posted."
- (interactive)
+(defun message-cancel-news (&optional arg)
+ "Cancel an article you posted.
+If ARG, allow editing of the cancellation message."
+ (interactive "P")
(unless (message-news-p)
(error "This is not a news article; canceling is impossible"))
(when (yes-or-no-p "Do you really want to cancel this article? ")
(message-make-from))))))
(error "This article is not yours"))
;; Make control message.
- (setq buf (set-buffer (get-buffer-create " *message cancel*")))
+ (if arg
+ (message-news)
+ (setq buf (set-buffer (get-buffer-create " *message cancel*"))))
(erase-buffer)
(insert "Newsgroups: " newsgroups "\n"
"From: " (message-make-from) "\n"
message-cancel-message)
(run-hooks 'message-cancel-hook)
(message "Canceling your article...")
- (if (let ((message-syntax-checks
- 'dont-check-for-anything-just-trust-me)
- (message-encoding-buffer (current-buffer))
- (message-edit-buffer (current-buffer)))
- (message-send-news))
- (message "Canceling your article...done"))
- (kill-buffer buf)))))
+ (unless arg
+ (if (let ((message-syntax-checks
+ 'dont-check-for-anything-just-trust-me)
+ (message-encoding-buffer (current-buffer))
+ (message-edit-buffer (current-buffer)))
+ (message-send-news))
+ (message "Canceling your article...done"))
+ (kill-buffer buf))))))
(defun message-supersede-setup-for-mime-edit ()
(set (make-local-variable 'message-setup-hook) nil)
(require 'gnus-mailcap)
(require 'mm-bodies)
+(defvar mm-xemacs-p (string-match "XEmacs" (emacs-version)))
+
(defgroup mime-display ()
"Display of MIME in mail and news articles."
:link '(custom-manual "(emacs-mime)Customization")
"Return the handle(s) referred to by ID."
(cdr (assoc id mm-content-id-alist)))
-(defun mm-get-image (handle)
+(defun mm-get-image-emacs (handle)
+ "Return an image instance based on HANDLE."
+ (let ((type (mm-handle-media-subtype handle))
+ spec)
+ ;; Allow some common translations.
+ (setq type
+ (cond
+ ((equal type "x-pixmap")
+ "xpm")
+ ((equal type "x-xbitmap")
+ "xbm")
+ (t type)))
+ (or (mm-handle-cache handle)
+ (mm-with-unibyte-buffer
+ (mm-insert-part handle)
+ (prog1
+ (setq spec
+ (ignore-errors
+ (cond
+ ((equal type "xbm")
+ ;; xbm images require special handling, since
+ ;; the only way to create glyphs from these
+ ;; (without a ton of work) is to write them
+ ;; out to a file, and then create a file
+ ;; specifier.
+ (error "Don't know what to do for XBMs right now."))
+ (t
+ (list 'image :type (intern type) :data (buffer-string))))))
+ (mm-handle-set-cache handle spec))))))
+
+(defun mm-get-image-xemacs (handle)
"Return an image instance based on HANDLE."
(let ((type (mm-handle-media-subtype handle))
spec)
(vector (intern type) :data (buffer-string)))))))
(mm-handle-set-cache handle spec))))))
+(defun mm-get-image (handle)
+ (if mm-xemacs-p
+ (mm-get-image-xemacs handle)
+ (mm-get-image-emacs handle)))
+
(defun mm-image-fit-p (handle)
"Say whether the image in HANDLE will fit the current window."
(let ((image (mm-get-image handle)))
- (or mm-inline-large-images
- (and (< (glyph-width image) (window-pixel-width))
- (< (glyph-height image) (window-pixel-height))))))
+ (if (fboundp 'glyph-width)
+ ;; XEmacs' glyphs can actually tell us about their width, so
+ ;; lets be nice and smart about them.
+ (or mm-inline-large-images
+ (and (< (glyph-width image) (window-pixel-width))
+ (< (glyph-height image) (window-pixel-height))))
+ ;; Let's just inline everything under Emacs 21, since the image
+ ;; specification there doesn't actually get the width/height
+ ;; until you render the image.
+ t)))
(defun mm-valid-image-format-p (format)
"Say whether FORMAT can be displayed natively by Emacs."
- (and (fboundp 'valid-image-instantiator-format-p)
- (valid-image-instantiator-format-p format)))
+ (cond
+ ;; Handle XEmacs
+ ((fboundp 'valid-image-instantiator-format-p)
+ (valid-image-instantiator-format-p format))
+ ;; Handle Emacs 21
+ ((fboundp 'image-type-available-p)
+ (image-type-available-p format))
+ ;; Nobody else can do images yet.
+ (t
+ nil)))
(defun mm-valid-and-fit-image-p (format handle)
"Say whether FORMAT can be displayed natively and HANDLE fits the window."
(setq end-char-1 (match-beginning 0))
(forward-line)
(setq end-char (point))
- (when (or (not (eq type 'binhex))
- (setq file-name
- (ignore-errors
- (binhex-decode-region start-char end-char t))))
+ (when (cond
+ ((eq type 'binhex)
+ (setq file-name
+ (ignore-errors
+ (binhex-decode-region start-char end-char t))))
+ ((eq type 'forward)
+ (save-excursion
+ (goto-char start-char-1)
+ (looking-at "[\r\n]*[a-zA-Z][a-zA-Z0-9-]*:")))
+ (t t))
(if (> start-char text-start)
(push
(mm-make-handle (mm-uu-copy-to-buffer text-start start-char)
;;;
;;; Functions for displaying various formats inline
;;;
+(defun mm-inline-image-emacs (handle)
+ (let ((b (point))
+ (overlay nil)
+ (string (copy-sequence "[MM-INLINED-IMAGE]"))
+ buffer-read-only)
+ (insert "\n")
+ (buffer-name)
+ (setq overlay (make-overlay (point) (point) (current-buffer)))
+ (put-text-property 0 (length string) 'display (mm-get-image handle) string)
+ (overlay-put overlay 'before-string string)
-(defun mm-inline-image (handle)
+ (mm-handle-set-undisplayer
+ handle
+ `(lambda ()
+ (let (buffer-read-only)
+ (delete-overlay ,overlay)
+ (delete-region ,(set-marker (make-marker) b)
+ ,(set-marker (make-marker) (point))))))))
+
+(defun mm-inline-image-xemacs (handle)
(let ((b (point))
(annot (make-annotation (mm-get-image handle) nil 'text))
buffer-read-only)
(set-extent-property annot 'mm t)
(set-extent-property annot 'duplicable t)))
+(defun mm-inline-image (handle)
+ (if mm-xemacs-p
+ (mm-inline-image-xemacs handle)
+ (mm-inline-image-emacs handle)))
+
(defvar mm-w3-setup nil)
(defun mm-setup-w3 ()
(unless mm-w3-setup
:type '(choice (const :tag "nnmail-expiry-wait" nil)
(function :format "%v" nnmail-)))
+(defcustom nnmail-expiry-target 'delete
+ "*Variable that says where expired messages should end up."
+ :group 'nnmail-expire
+ :type '(choice (const delete)
+ (function :format "%v" nnmail-)
+ string))
+
(defcustom nnmail-cache-accepted-message-ids nil
"If non-nil, put Message-IDs of Gcc'd articles into the duplicate cache."
:group 'nnmail
;; Compare the time with the current time.
(ignore-errors (time-less-p days (time-since time))))))))
+(defun nnmail-expiry-target-group (target group)
+ (when (nnheader-functionp target)
+ (setq target (funcall target group)))
+ (unless (eq target 'delete)
+ (gnus-request-accept-article target)))
+
(defun nnmail-check-syntax ()
"Check (and modify) the syntax of the message in the current buffer."
(save-restriction
(nnmail-expired-article-p group mod-time force
nnml-inhibit-expiry)))
(progn
+ ;; Allow a special target group.
+ (unless (eq nnmail-expiry-target 'delete)
+ (with-temp-buffer
+ (nnml-request-article article group server
+ (current-buffer))
+ (nnmail-expiry-target-group
+ nnmail-expiry-target group)))
(nnheader-message 5 "Deleting article %s in %s"
article group)
(condition-case ()
+2000-04-20 20:37:48 Pavel Janik <Pavel.Janik@inet.cz>
+
+ * gnus.texi (Limiting): Fix.
+
+2000-04-20 20:32:40 Dmitry Yaitskov <dimas@home.com>
+
+ * gnus.texi (Charsets): Typo fix.
+
2000-03-19 Simon Josefsson <jas@pdc.kth.se>
* gnus.texi (IMAP): Addition.
@kindex / x (\e$(B35N,\e(B)
@findex gnus-summary-limit-to-extra
``\e$(BDI2C\e(B'' \e$(B$N%X%C%@!<$N0l$D$K9gCW$9$k5-;v$K35N,%P%C%U%!$r@)8B$7$^$9\e(B
-(@pxref{To From Newsgroups}) (@code{gnus-summary-limit-to-author}).
+(@pxref{To From Newsgroups}) (@code{gnus-summary-limit-to-extra}).
@item / u
@itemx x
@kindex / t \e$(B!J35N,!K\e(B
@findex gnus-summary-limit-to-age
\e$(B?t;z$r?R$M$F!"35N,%P%C%U%!$r$=$N?t;z$NF|$h$j8E$$!J$b$7$/$OF1$8!K5-;v$K@)8B\e(B
-\e$(B$7$^$9\e(B (@code{gnus-summary-limit-to-marks})\e$(B!#$b$7@\F,0z?t$,M?$($i$l$l$P!"\e(B
+\e$(B$7$^$9\e(B (@code{gnus-summary-limit-to-age})\e$(B!#$b$7@\F,0z?t$,M?$($i$l$l$P!"\e(B
\e$(B$=$N?t;z$NF|$h$j$b?7$7$$5-;v$K@)8B$7$^$9!#\e(B
@item / n
\e$(B4|8B@Z$l4|4V$rA*BrE*$KJQ99$9$k$?$a$K%0%k!<%W%Q%i%a!<%?\e(B
@code{expiry-wait} \e$(B$r;H$&;v$b$G$-$^$9\e(B (@pxref{Group Parameters})\e$(B!#\e(B
+@vindex nnmail-expiry-target
+\e$(B5-;v$N4|8B@Z$l>C5n$NIaDL$NF0:n$O$=$l$i$r>C5n$9$k$3$H$G$9!#$7$+$7!">l9g$K\e(B
+\e$(B$h$C$F$O$=$l$i$r>C5n$9$k$h$j$bJL$N%0%k!<%W$K0\F0$7$?J}$,M-0U5A$+$b$7$l$^\e(B
+\e$(B$;$s!#\e(B@code{nnmail-expiry-target} (\e$(B$H%0%k!<%W%Q%i%a!<%?\e(B
+@code{expiry-target}) \e$(B$O$3$l$r@)8f$7$^$9!#%G%#%U%)%k%H$NCM$O\e(B
+@code{delete} \e$(B$G$9$,!"J8;zNs\e(B (\e$(B5-;v$r0\F0$9$k@h$N%0%k!<%WL>\e(B) \e$(B$^$?$O0\F0@h\e(B
+\e$(B$N%0%k!<%WL>$+\e(B @code{delete} \e$(B$rJV$94X?t\e(B (\e$(B5-;v$KHO0O$r69$a$?%P%C%U%!$G!"\e(B
+\e$(B$=$N5-;v$,B8:_$7$F$$$k%0%k!<%WL>$,0z?t$H$7$FM?$($i$l$^$9\e(B) \e$(B$K$9$k$3$H$,$G\e(B
+\e$(B$-$^$9!#\e(B
+
@vindex nnmail-keep-last-article
@code{nnmail-keep-last-article} \e$(B$,\e(B @code{nil} \e$(B$G$J$$$H!"\e(Bgnus \e$(B$O%a!<%k%K%e!<\e(B
\e$(B%9%0%k!<%W$N:G8e$N5-;v$r7h$7$F4|8B@Z$l>C5n$7$^$;$s!#$3$l$O\e(B procmail \e$(B$NMx\e(B
@findex gnus-summary-limit-to-extra
Limit the summary buffer to articles that match one of the ``extra''
headers (@pxref{To From Newsgroups})
-(@code{gnus-summary-limit-to-author}).
+(@code{gnus-summary-limit-to-extra}).
@item / u
@itemx x
@kindex / t (Summary)
@findex gnus-summary-limit-to-age
Ask for a number and then limit the summary buffer to articles older than (or equal to) that number of days
-(@code{gnus-summary-limit-to-marks}). If given a prefix, limit to
+(@code{gnus-summary-limit-to-age}). If given a prefix, limit to
articles younger than that number of days.
@item / n
@table @kbd
@item K b
@kindex K b (Summary)
-Make all the @sc{mime} parts have buttons in from of them.
+Make all the @sc{mime} parts have buttons in from of them. This is
+mostly useful if you wish to save (or perform other actions) on inlined
+parts.
@item K m
@kindex K m (Summary)
header body-list}@code{)}, where:
@table @var
-@item
-test
+@item test
is either a regular expression matching the newsgroup header or a
variable to query,
@item header
You can also use the @code{expiry-wait} group parameter to selectively
change the expiry period (@pxref{Group Parameters}).
+@vindex nnmail-expiry-target
+The normal action taken when expiring articles is to delete them.
+However, in some circumstances it might make more sense to move them to
+other groups instead of deleting them. The @code{nnmail-expiry-target}
+(and the @code{expiry-target} group parameter) controls this. The
+default value is @code{delete}, but this can also be a string (which
+should be the name of the group the message should be moved to), or a
+function (which will be called in a buffer narrowed to the message in
+question, and with the name of the group being moved from as its
+parameter) which should return a target -- either a group name or
+@code{delete}.
+
@vindex nnmail-keep-last-article
If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
expire the final article in a mail newsgroup. This is to make life