+Thu Sep 24 02:29:57 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Pterodactyl Gnus v0.32 is released.
+
+1998-09-24 00:27:11 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-kill.el (gnus-batch-score): Protect against errors.
+
+ * gnus-art.el: Protect against broken headers.
+
+ * mm-decode.el (mm-display-external): Respect needsterm.
+ (mm-display-external): Create buffer for external commands.
+
+1998-09-23 22:04:05 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * mailcap.el (mailcap-mime-info): Return the proper viewer.
+
+ * mm-decode.el (mm-display-external): Use file name.
+
+1998-09-22 Markus Rost <markus.rost@mathematik.uni-regensburg.de>
+
+ * gnus-util.el (gnus-output-to-rmail): adjust to
+ `rmail-output-to-rmail-file'
+
+1998-09-23 20:07:00 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-util.el (gnus-output-to-rmail): Reinstated function.
+
+ * gnus-sum.el (gnus-select-newsgroup): Set global variables before
+ headers.
+
+ * gnus-art.el (article-decode-charset): Fold case.
+
+1998-09-17 15:49:10 Simon Josefsson <jas@pdc.kth.se>
+
+ * mailcap.el (mailcap-save-binary-file): Goto point-min.
+
+1998-09-23 19:48:52 Aaron M. Ucko <amu@mit.edu>
+
+ * nnmail.el (nnmail-check-duplication): Enter into duplicate list
+ after being stored.
+
+Tue Sep 15 16:15:16 1998 Kurt Swanson <ksw@dna.lth.se>
+
+ * gnus-salt.el (gnus-pick-setup-message): Return from whence ye
+ come.
+
+1998-09-23 19:42:03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-xmas.el (wid-edit): Required.
+
+ * gnus-ems.el (gnus-widget-button-keymap): New variable.
+
+Sun Sep 20 00:27:55 1998 ZHU Shenghuo <zsh@cs.rochester.edu>
+
+ * gnus-art.el (gnus-mime-inline-part): remove part if necessary
+
+1998-09-23 19:30:52 Matt Armstrong <matta@geoworks.com>
+
+ * gnus-art.el (article-decode-charset): Narrow to the correct
+ region.
+
+ * mm-bodies.el: Fix autoload.
+
+1998-09-22 18:35:12 Lee Willis <lee@gbdirect.co.uk>
+
+ * gnus-art.el (gnus-mime-button-line-format): Doc fix.
+
+1998-09-22 14:53:35 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * rfc2047.el (rfc2047-decode): Use rfc2047-default-charset.
+
+1998-09-19 13:58:35 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-insert-mime-button): Specify keymap.
+ (gnus-article-add-button): Ditto.
+
+ * gnus-sum.el (gnus-summary-insert-pseudos): Use mm.
+
+ * gnus-art.el (gnus-article-prepare-display): Make article mode.
+ (gnus-article-prepare-display): Bind url-standalone-mode.
+
+ * mm-decode.el (mm-remove-part): Also delete directory.
+ (mm-display-external): Create a private sub-dir.
+
+ * mailcap.el (mailcap-binary-suffixes): New variable.
+ (mailcap-command-p): Use it.
+
+1998-09-16 10:38:21 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nnmbox.el (nnmbox-request-group): Change server.
+ (nnmbox-possibly-change-newsgroup): Enable multibyte.
+
+ * message.el (message-encode-message-body): Don't stomp MIME
+ headers.
+
+ * gnus-sum.el (gnus-summary-edit-article-done): Don't encode
+ unless useful.
+ (gnus-summary-exit): Check for a live article buffer.
+ (gnus-summary-exit-no-update): Ditto.
+
+ * gnus-int.el (gnus-request-replace-article): Accept no-encode
+ param.
+
+ * gnus-sum.el (gnus-article-decoded-p): New variable.
+
+ * mm-decode.el (mm-display-external): Use no-conv.
+
+ * rfc2047.el (rfc2047-q-encode-region): Bound properly.
+ (rfc2047-charset-encoding-alist): Use B encoding for koi8-r.
+
+ * gnus-art.el (gnus-article-mode-map): Bind button2 to
+ mouse-click.
+
+1998-09-15 14:38:02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-agent.el (gnus-agent-expire): Protect against nil infos.
+
Mon Sep 14 18:55:38 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Pterodactyl Gnus v0.31 is released.
(gnus-set-default-directory)
(setq mode-line-process nil)
(use-local-map gnus-category-mode-map)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq truncate-lines t)
(setq buffer-read-only t)
(gnus-run-hooks 'gnus-category-mode-hook))
;; Maybe everything has been expired from `gnus-article-alist'
;; and so the above marking as read could not be conducted,
;; or there are expired article within the range of the alist.
- (when (or (not (caar gnus-agent-article-alist))
- (> (car expired) (caar gnus-agent-article-alist)))
- (setcar (nthcdr 2 info)
- (gnus-add-to-range
- (nth 2 info)
- (nreverse expired))))
+ (when (and info
+ expired
+ (or (not (caar gnus-agent-article-alist))
+ (> (car expired)
+ (caar gnus-agent-article-alist))))
+ (setcar (nthcdr 2 info)
+ (gnus-add-to-range
+ (nth 2 info)
+ (nreverse expired))))
(gnus-dribble-enter
(concat "(gnus-group-set-info '"
(gnus-prin1-to-string info)
(save-restriction
(message-narrow-to-head)
(let* ((inhibit-point-motion-hooks t)
+ (case-fold-search t)
(ct (message-fetch-field "Content-Type" t))
(cte (message-fetch-field "Content-Transfer-Encoding" t))
(ctl (and ct (condition-case ()
buffer-read-only)
(goto-char (point-max))
(widen)
+ (forward-line 1)
(narrow-to-region (point) (point-max))
(when (or (not ct)
(equal (car ctl) "text/plain"))
"\C-c\C-i" gnus-info-find-node
"\C-c\C-b" gnus-bug
+ gnus-mouse-2 'widget-button-click
+
"\C-d" gnus-article-read-summary-keys
"\M-*" gnus-article-read-summary-keys
"\M-#" gnus-article-read-summary-keys
(make-local-variable 'gnus-button-marker-list)
(make-local-variable 'gnus-article-current-summary)
(make-local-variable 'gnus-article-mime-handles)
+ (make-local-variable 'gnus-article-decoded-p)
(gnus-set-default-directory)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq buffer-read-only t)
(set-syntax-table gnus-article-mode-syntax-table)
(mm-enable-multibyte)
(if (get-buffer name)
(save-excursion
(set-buffer name)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq buffer-read-only t)
(unless (eq major-mode 'gnus-article-mode)
(gnus-article-mode))
;; This hook must be called before being narrowed.
(let ((gnus-article-buffer (current-buffer))
buffer-read-only)
+ (unless (eq major-mode 'gnus-article-mode)
+ (gnus-article-mode))
(gnus-run-hooks 'gnus-tmp-internal-hook)
(gnus-run-hooks 'gnus-article-prepare-hook)
(when gnus-display-mime-function
- (funcall gnus-display-mime-function))
+ (let ((url-standalone-mode (not gnus-plugged)))
+ (funcall gnus-display-mime-function)))
;; Perform the article display hooks.
(gnus-run-hooks 'gnus-article-display-hook)))
"The following specs can be used:
%t The MIME type
%n The `name' parameter
-%n The description, if any
+%d The description, if any
%l The length of the encoded part")
(defvar gnus-mime-button-line-format-alist
(defun gnus-mime-view-part ()
"Interactively choose a view method for the MIME part under point."
(interactive)
- (let ((data (get-text-property (point) 'gnus-data)))
+ (let ((data (get-text-property (point) 'gnus-data))
+ (url-standalone-mode (not gnus-plugged)))
(mm-interactively-view-part data)))
(defun gnus-mime-copy-part ()
(interactive)
(let* ((data (get-text-property (point) 'gnus-data))
(contents (mm-get-part data))
+ (url-standalone-mode (not gnus-plugged))
(b (point))
buffer-read-only)
- (forward-line 2)
- (mm-insert-inline data contents)
- (goto-char b)))
+ (if (mm-handle-undisplayer data)
+ (mm-remove-part data)
+ (forward-line 2)
+ (mm-insert-inline data contents)
+ (goto-char b))))
(defun gnus-insert-mime-button (handle)
(let ((gnus-tmp-name (mail-content-type-get (mm-handle-type handle) 'name))
(gnus-tmp-type (car (mm-handle-type handle)))
(gnus-tmp-description (mm-handle-description handle))
- (gnus-tmp-length (save-excursion
- (set-buffer (mm-handle-buffer handle))
- (buffer-size)))
+ (gnus-tmp-length (with-temp-buffer (mm-handle-buffer handle)
+ (buffer-size)))
b e)
(setq gnus-tmp-name
- (if gnus-tmp-name
- (concat " (" gnus-tmp-name ")")
- ""))
+ (if gnus-tmp-name
+ (concat " (" gnus-tmp-name ")")
+ ""))
(setq gnus-tmp-description
- (if gnus-tmp-description
- (concat " (" gnus-tmp-description ")")
- ""))
+ (if gnus-tmp-description
+ (concat " (" gnus-tmp-description ")")
+ ""))
(setq b (point))
(gnus-eval-format
gnus-mime-button-line-format gnus-mime-button-line-format-alist
gnus-callback mm-display-part
gnus-data ,handle))
(setq e (point))
- (widget-convert-button 'link b e :action 'gnus-widget-press-button)))
+ (widget-convert-button 'link b e :action 'gnus-widget-press-button
+ :button-keymap gnus-widget-button-keymap)))
(defun gnus-widget-press-button (elems el)
(goto-char (widget-get elems :from))
- (gnus-article-press-button))
+ (let ((url-standalone-mode (not gnus-plugged)))
+ (gnus-article-press-button)))
(defun gnus-display-mime ()
"Insert MIME buttons in the buffer."
(save-restriction
(mail-narrow-to-head)
(when (setq ct (mail-fetch-field "content-type"))
- (setq ctl (mail-header-parse-content-type ct))))
- (let* ((handles (mm-dissect-buffer))
- handle name type b e)
- (mapcar 'mm-destroy-part gnus-article-mime-handles)
- (setq gnus-article-mime-handles handles)
- (when handles
- (goto-char (point-min))
- (search-forward "\n\n" nil t)
- (delete-region (point) (point-max))
- (if (not (equal (car ctl) "multipart/alternative"))
- (while (setq handle (pop handles))
- (gnus-insert-mime-button handle)
- (insert "\n\n")
- (when (and (mm-automatic-display-p (car (mm-handle-type handle)))
- (or (not (mm-handle-disposition handle))
- (equal (car (mm-handle-disposition handle))
- "inline")))
- (forward-line -2)
- (mm-display-part handle t)
- (goto-char (point-max))))
- ;; Here we have multipart/alternative
- (gnus-mime-display-alternative handles))))))
+ (setq ctl (condition-case ()
+ (mail-header-parse-content-type ct) (error nil)))
+ (let* ((handles (mm-dissect-buffer))
+ handle name type b e)
+ (mapcar 'mm-destroy-part gnus-article-mime-handles)
+ (setq gnus-article-mime-handles handles)
+ (when handles
+ (goto-char (point-min))
+ (search-forward "\n\n" nil t)
+ (delete-region (point) (point-max))
+ (if (not (equal (car ctl) "multipart/alternative"))
+ (while (setq handle (pop handles))
+ (gnus-insert-mime-button handle)
+ (insert "\n\n")
+ (when (and (mm-automatic-display-p
+ (car (mm-handle-type handle)))
+ (or (not (mm-handle-disposition handle))
+ (equal (car (mm-handle-disposition handle))
+ "inline")))
+ (forward-line -2)
+ (mm-display-part handle t)
+ (goto-char (point-max))))
+ ;; Here we have multipart/alternative
+ (gnus-mime-display-alternative handles))))))))
(defun gnus-mime-display-alternative (handles &optional preferred)
(let* ((preferred (mm-preferred-alternative handles preferred))
(if (get-buffer gnus-original-article-buffer)
(set-buffer gnus-original-article-buffer)
(set-buffer (gnus-get-buffer-create gnus-original-article-buffer))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq major-mode 'gnus-original-article-mode)
(setq buffer-read-only t))
(let (buffer-read-only)
(setq gnus-original-article (cons group article)))
;; Decode charsets.
- (run-hooks 'gnus-article-decode-hook))
+ (run-hooks 'gnus-article-decode-hook)
+ ;; Mark article as decoded or not.
+ (setq gnus-article-decoded-p gnus-article-decode-hook))
;; Update sparse articles.
(when (and do-update-line
(list gnus-mouse-face-prop gnus-article-mouse-face))
(list 'gnus-callback fun)
(and data (list 'gnus-data data))))
- (widget-convert-button 'link from to :action 'gnus-widget-press-button))
+ (widget-convert-button 'link from to :action 'gnus-widget-press-button
+ :button-keymap gnus-widget-button-keymap))
;;; Internal functions:
(or (get-buffer gnus-backlog-buffer)
(save-excursion
(set-buffer (gnus-get-buffer-create gnus-backlog-buffer))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq buffer-read-only t)
(get-buffer gnus-backlog-buffer))))
(defvar gnus-mouse-2 [mouse-2])
(defvar gnus-down-mouse-2 [down-mouse-2])
+(defvar gnus-widget-button-keymap nil)
(defvar gnus-mode-line-modified
(if (or gnus-xemacs
(< emacs-major-version 20))
(gnus-group-set-mode-line)
(setq mode-line-process nil)
(use-local-map gnus-group-mode-map)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq truncate-lines t)
(setq buffer-read-only t)
(gnus-set-default-directory)
;; Print out all the groups.
(save-excursion
(pop-to-buffer "*Gnus Help*")
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(erase-buffer)
(setq groups (sort groups 'string<))
(while groups
(cadr gnus-command-method)
last)))
-(defun gnus-request-replace-article (article group buffer)
- (save-restriction
- (message-narrow-to-head)
- (mail-encode-encoded-word-buffer))
- (message-encode-message-body)
+(defun gnus-request-replace-article (article group buffer &optional no-encode)
+ (unless no-encode
+ (save-restriction
+ (message-narrow-to-head)
+ (mail-encode-encoded-word-buffer))
+ (message-encode-message-body))
(let ((func (car (gnus-group-name-to-method group))))
(funcall (intern (format "%s-request-replace-article" func))
article (gnus-group-real-name group) buffer)))
(defun gnus-score-insert-help (string alist idx)
(save-excursion
(pop-to-buffer "*Score Help*")
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(erase-buffer)
(insert string ":\n\n")
(while alist
(concat "\n" (gnus-prin1-to-string object))
(save-excursion
(set-buffer (gnus-get-buffer-create "*Gnus PP*"))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(erase-buffer)
(insert (format "\n(%S %S\n '(" (nth 0 object) (nth 1 object)))
(let ((klist (cadr (nth 2 object)))
(and (car entry)
(or (eq (car entry) t)
(not (zerop (car entry))))))
- (gnus-summary-read-group group nil t nil t)
+ (condition-case ()
+ (gnus-summary-read-group group nil t nil t)
+ (error nil))
(when (eq (current-buffer) (get-buffer gnus-summary-buffer))
(gnus-summary-exit))))
;; Exit Emacs.
(set-buffer gnus-summary-buffer)
gnus-pick-mode))
(message-add-action
- '(gnus-configure-windows 'pick t) 'send 'exit 'postpone 'kill)))
+ '(gnus-configure-windows ,gnus-current-window-configuration t)
+ 'send 'exit 'postpone 'kill)))
(defvar gnus-pick-line-number 1)
(defun gnus-pick-line-number ()
(setq mode-name "Tree")
(setq major-mode 'gnus-tree-mode)
(use-local-map gnus-tree-mode-map)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq buffer-read-only t)
(setq truncate-lines t)
(save-excursion
(setq mode-name "Gnus Carpal")
(setq mode-line-process nil)
(use-local-map gnus-carpal-mode-map)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq buffer-read-only t)
(make-local-variable 'gnus-carpal-attached-buffer)
(gnus-run-hooks 'gnus-carpal-mode-hook))
(setq gnus-score-help-winconf (current-window-configuration))
(save-excursion
(set-buffer (gnus-get-buffer-create "*Score Help*"))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(delete-windows-on (current-buffer))
(erase-buffer)
(insert string ":\n\n")
(save-excursion
(set-buffer (gnus-get-buffer-create "*Headers*"))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(when (gnus-buffer-live-p gnus-summary-buffer)
(message-clone-locals gnus-summary-buffer))
ofiles not-match regexp)
(save-excursion
(set-buffer (gnus-get-buffer-create "*gnus score files*"))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
;; Go through all score file names and create regexp with them
;; as the source.
(while sfiles
(when (file-exists-p file)
(save-excursion
(set-buffer (nnheader-find-file-noselect file 'force))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(goto-char (point-min))
(while (not (eobp))
(push (vector (gnus-soup-field)
(let (replies)
(save-excursion
(set-buffer (nnheader-find-file-noselect file))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(goto-char (point-min))
(while (not (eobp))
(push (vector (gnus-soup-field) (gnus-soup-field)
(gnus-set-default-directory)
(setq mode-line-process nil)
(use-local-map gnus-server-mode-map)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq truncate-lines t)
(setq buffer-read-only t)
(gnus-run-hooks 'gnus-server-mode-hook))
(when gnus-carpal
(gnus-carpal-setup-buffer 'browse))
(gnus-configure-windows 'browse)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(let ((buffer-read-only nil))
(erase-buffer))
(gnus-browse-mode)
(setq mode-name "Browse Server")
(setq mode-line-process nil)
(use-local-map gnus-browse-mode-map)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq truncate-lines t)
(gnus-set-default-directory)
(setq buffer-read-only t)
(erase-buffer)
(setq buffer-file-name dribble-file)
(auto-save-mode t)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(bury-buffer (current-buffer))
(set-buffer-modified-p nil)
(let ((auto (make-auto-save-file-name))
(save-excursion
(gnus-message 5 "Reading %s..." newsrc-file)
(set-buffer (nnheader-find-file-noselect newsrc-file))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(gnus-newsrc-to-gnus-format)
(kill-buffer (current-buffer))
(gnus-message 5 "Reading %s...done" newsrc-file)))
(setq buffer-file-name
(concat gnus-current-startup-file ".eld"))
(setq default-directory (file-name-directory buffer-file-name))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(erase-buffer)
(gnus-message 5 "Saving %s.eld..." gnus-current-startup-file)
(gnus-gnus-to-quick-newsrc-format)
info ranges range method)
(setq buffer-file-name gnus-current-startup-file)
(setq default-directory (file-name-directory buffer-file-name))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(erase-buffer)
;; Write options.
(when gnus-newsrc-options
;;; Internal variables
(defvar gnus-article-mime-handles nil)
+(defvar gnus-article-decoded-p nil)
(defvar gnus-scores-exclude-files nil)
(defvar gnus-page-broken nil)
(setq mode-name "Summary")
(make-local-variable 'minor-mode-alist)
(use-local-map gnus-summary-mode-map)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq buffer-read-only t) ;Disable modification
(setq truncate-lines t)
(setq selective-display t)
;; Init the dependencies hash table.
(setq gnus-newsgroup-dependencies
(gnus-make-hashtable (length articles)))
+ (gnus-set-global-variables)
;; Retrieve the headers and read them in.
(gnus-message 5 "Fetching headers for %s..." gnus-newsgroup-name)
(setq gnus-newsgroup-headers
(setq group-point (point))
(if temporary
nil ;Nothing to do.
- (save-excursion
- (set-buffer gnus-article-buffer)
- (mapcar 'mm-destroy-part gnus-article-mime-handles))
+ (when (gnus-buffer-live-p gnus-article-buffer)
+ (save-excursion
+ (set-buffer gnus-article-buffer)
+ (mapcar 'mm-destroy-part gnus-article-mime-handles)))
;; If we have several article buffers, we kill them at exit.
(unless gnus-single-article-buffer
(gnus-kill-buffer gnus-article-buffer)
(gnus-y-or-n-p "Discard changes to this group and exit? "))
(gnus-async-halt-prefetch)
(gnus-run-hooks 'gnus-summary-prepare-exit-hook)
- (save-excursion
- (set-buffer gnus-article-buffer)
- (mapcar 'mm-destroy-part gnus-article-mime-handles))
+ (when (gnus-buffer-live-p gnus-article-buffer)
+ (save-excursion
+ (set-buffer gnus-article-buffer)
+ (mapcar 'mm-destroy-part gnus-article-mime-handles)))
;; If we have several article buffers, we kill them at exit.
(unless gnus-single-article-buffer
(gnus-kill-buffer gnus-article-buffer)
(if (and (not read-only)
(not (gnus-request-replace-article
(cdr gnus-article-current) (car gnus-article-current)
- (current-buffer))))
+ (current-buffer)
+ (not gnus-article-decoded-p))))
(error "Couldn't replace article")
;; Update the summary buffer.
(if (and references
(lambda (f)
(if (equal f " ")
f
- (gnus-quote-arg-for-sh-or-csh f)))
+ (mm-quote-arg f)))
files " ")))))
(setq ps (cdr ps)))))
(if (and gnus-view-pseudos (not not-view))
;;; Functions for saving to babyl/mail files.
+(defvar rmail-default-rmail-file)
+(defun gnus-output-to-rmail (filename &optional ask)
+ "Append the current article to an Rmail file named FILENAME."
+ (require 'rmail)
+ ;; Most of these codes are borrowed from rmailout.el.
+ (setq filename (expand-file-name filename))
+ (setq rmail-default-rmail-file filename)
+ (let ((artbuf (current-buffer))
+ (tmpbuf (gnus-get-buffer-create " *Gnus-output*")))
+ (save-excursion
+ (or (get-file-buffer filename)
+ (file-exists-p filename)
+ (if (or (not ask)
+ (gnus-yes-or-no-p
+ (concat "\"" filename "\" does not exist, create it? ")))
+ (let ((file-buffer (create-file-buffer filename)))
+ (save-excursion
+ (set-buffer file-buffer)
+ (rmail-insert-rmail-file-header)
+ (let ((require-final-newline nil))
+ (gnus-write-buffer filename)))
+ (kill-buffer file-buffer))
+ (error "Output file does not exist")))
+ (set-buffer tmpbuf)
+ (erase-buffer)
+ (insert-buffer-substring artbuf)
+ (gnus-convert-article-to-rmail)
+ ;; Decide whether to append to a file or to an Emacs buffer.
+ (let ((outbuf (get-file-buffer filename)))
+ (if (not outbuf)
+ (append-to-file (point-min) (point-max) filename)
+ ;; File has been visited, in buffer OUTBUF.
+ (set-buffer outbuf)
+ (let ((buffer-read-only nil)
+ (msg (and (boundp 'rmail-current-message)
+ (symbol-value 'rmail-current-message))))
+ ;; If MSG is non-nil, buffer is in RMAIL mode.
+ (when msg
+ (widen)
+ (narrow-to-region (point-max) (point-max)))
+ (insert-buffer-substring tmpbuf)
+ (when msg
+ (goto-char (point-min))
+ (widen)
+ (search-backward "\n\^_")
+ (narrow-to-region (point) (point-max))
+ (rmail-count-new-messages t)
+ (when (rmail-summary-exists)
+ (rmail-select-summary
+ (rmail-update-summary)))
+ (rmail-count-new-messages t)
+ (rmail-show-message msg))
+ (save-buffer)))))
+ (kill-buffer tmpbuf)))
+
(defun gnus-output-to-mail (filename &optional ask)
"Append the current article to a mail file named FILENAME."
(setq filename (expand-file-name filename))
;; finally just replaces the next to last number with "[0-9]+".
(save-excursion
(set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(erase-buffer)
(insert (regexp-quote string))
string)
(save-excursion
(set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(while string-list
(erase-buffer)
(insert (caar string-list))
(require 'text-props)
(defvar menu-bar-mode (featurep 'menubar))
(require 'messagexmas)
+(require 'wid-edit)
(defgroup gnus-xmas nil
"XEmacsoid support for Gnus"
(defun gnus-xmas-define ()
(setq gnus-mouse-2 [button2])
+ (setq gnus-widget-button-keymap widget-button-keymap)
(unless (memq 'underline (face-list))
(and (fboundp 'make-face)
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "0.31"
+(defconst gnus-version-number "0.32"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Pterodactyl Gnus v%s" gnus-version-number)
gnus-uu-decode-unshar-and-save-view gnus-uu-decode-save-view
gnus-uu-decode-binhex-view gnus-uu-unmark-thread
gnus-uu-mark-over)
- ("gnus-uu" gnus-uu-delete-work-dir gnus-quote-arg-for-sh-or-csh
- gnus-uu-unmark-thread)
+ ("gnus-uu" gnus-uu-delete-work-dir gnus-uu-unmark-thread)
("gnus-msg" (gnus-summary-send-map keymap)
gnus-article-mail gnus-copy-article-buffer gnus-extended-version)
("gnus-msg" :interactive t
mule-write-region-no-coding-system
find-charset-region base64-decode-string
find-coding-systems-region get-charset-property
- coding-system-get w3-region))
+ coding-system-get w3-region
+ rmail-summary-exists rmail-select-summary
+ rmail-update-summary
+ ))
(maybe-bind '(global-face-data
mark-active transient-mark-mode mouse-selection-click-count
mouse-selection-click-count-buffer buffer-display-table
mm-copy-tree url-view-url w3-prepare-buffer
mule-write-region-no-coding-system char-int
annotationp delete-annotation make-image-specifier
- make-annotation base64-decode-string
- w3-do-setup w3-region)))
+ make-annotation base64-decode-string base64-encode-region
+ w3-do-setup w3-region
+ rmail-summary-exists rmail-select-summary rmail-update-summary
+ )))
(setq load-path (cons "." load-path))
(require 'custom)
(expand-file-name fname mailcap-temporary-directory))))
(defun mailcap-save-binary-file ()
+ (goto-char (point-min))
(let ((file (read-file-name
"Filename to save as: "
(or mailcap-download-directory "~/")))
(defun mailcap-parse-mailcaps (&optional path force)
"Parse out all the mailcaps specified in a unix-style path string PATH.
If FORCE, re-parse even if already parsed."
- (interactive)
+ (interactive (list nil t))
(when (or (not mailcap-parsed-p)
force)
(cond
(if (mailcap-viewer-passes-test (car viewers) info)
(setq passed (cons (car viewers) passed)))
(setq viewers (cdr viewers)))
- (setq passed (sort (nreverse passed) 'mailcap-viewer-lessp))
+ (setq passed (sort passed 'mailcap-viewer-lessp))
(setq viewer (car passed))))
(when (and (stringp (cdr (assq 'viewer viewer)))
passed)
(setq extn (concat "." extn)))
(cdr (assoc (downcase extn) mailcap-mime-extensions)))
+(defvar mailcap-binary-suffixes
+ (if (memq system-type '(ms-dos windows-nt))
+ '(".exe" ".com" ".bat" ".cmd" ".btm" "")
+ '("")))
+
(defun mailcap-command-p (command)
- "Say whether COMMAND is in the exec path."
+ "Say whether COMMAND is in the exec path.
+The path of COMMAND will be returned iff COMMAND is a command."
(let ((path (if (file-name-absolute-p command) '(nil) exec-path))
- file)
+ file dir)
(catch 'found
- (while path
- (when (and (file-executable-p
- (setq file (expand-file-name command (pop path))))
- (not (file-directory-p file)))
- (throw 'found file))))))
+ (while (setq dir (pop path))
+ (let ((suffixes mailcap-binary-suffixes))
+ (while suffixes
+ (when (and (file-executable-p
+ (setq file (expand-file-name
+ (concat command (pop suffixes))
+ dir)))
+ (not (file-directory-p file)))
+ (throw 'found file))))))))
(provide 'mailcap)
(unwind-protect
(save-excursion
(set-buffer tembuf)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(erase-buffer)
;; Avoid copying text props.
(insert (format
(message "No matching groups")
(save-selected-window
(pop-to-buffer "*Completions*")
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(let ((buffer-read-only nil))
(erase-buffer)
(let ((standard-output (current-buffer)))
(defun message-encode-message-body ()
"Examine the message body, encode it, and add the requisite headers."
(when (featurep 'mule)
- (save-excursion
- (save-restriction
- (message-narrow-to-headers-or-head)
- (message-remove-header
- "^Content-Transfer-Encoding:\\|^Content-Type:\\|^Mime-Version:" t)
- (goto-char (point-max))
- (widen)
- (narrow-to-region (point) (point-max))
- (let* ((charset (mm-encode-body))
- (encoding (mm-body-encoding)))
- (when (consp charset)
- (error "Can't encode messages with multiple charsets (yet)"))
- (widen)
+ (let (old-headers)
+ (save-excursion
+ (save-restriction
(message-narrow-to-headers-or-head)
+ (unless (setq old-headers (message-fetch-field "mime-version"))
+ (message-remove-header
+ "^Content-Transfer-Encoding:\\|^Content-Type:\\|^Mime-Version:" t))
(goto-char (point-max))
- (setq charset (or charset (mm-mule-charset-to-mime-charset 'ascii)))
- ;; We don't insert MIME headers if they only say the default.
- (unless (and (eq charset 'us-ascii)
- (eq encoding '7bit))
- (mm-insert-rfc822-headers charset encoding))
- (mm-encode-body))))))
+ (widen)
+ (narrow-to-region (point) (point-max))
+ (let* ((charset (mm-encode-body))
+ (encoding (mm-body-encoding)))
+ (when (consp charset)
+ (error "Can't encode messages with multiple charsets (yet)"))
+ (widen)
+ (message-narrow-to-headers-or-head)
+ (goto-char (point-max))
+ (setq charset (or charset
+ (mm-mule-charset-to-mime-charset 'ascii)))
+ ;; We don't insert MIME headers if they only say the default.
+ (when (and (not old-headers)
+ (not (and (eq charset 'us-ascii)
+ (eq encoding '7bit))))
+ (mm-insert-rfc822-headers charset encoding))
+ (mm-encode-body)))))))
(run-hooks 'message-load-hook)
;;; Code:
(eval-and-compile
- (or (fboundp 'base64-encode-region)
+ (or (fboundp 'base64-decode-region)
(autoload 'base64-decode-region "base64" nil t)))
(require 'mm-util)
(require 'rfc2047)
(when (and charset
(setq mule-charset (mm-charset-to-coding-system charset))
buffer-file-coding-system
- ;;(not (mm-coding-system-equal
- ;; buffer-file-coding-system mule-charset))
- )
+ (or (not (eq mule-charset 'ascii))
+ (setq mule-charset rfc2047-default-charset)))
(mm-decode-coding-region (point-min) (point-max) mule-charset))))))
(provide 'mm-bodies)
(if (functionp method)
(let ((cur (current-buffer)))
(switch-to-buffer (generate-new-buffer "*mm*"))
+ (buffer-disable-undo)
+ (mm-set-buffer-file-coding-system 'no-conversion)
(insert-buffer-substring cur)
(funcall method)
(mm-handle-set-undisplayer handle (current-buffer)))
- (let* ((file (make-temp-name (expand-file-name "emm." mm-tmp-directory)))
- process)
+ (let* ((dir (make-temp-name (expand-file-name "emm." mm-tmp-directory)))
+ (filename (mail-content-type-get
+ (mm-handle-disposition handle) 'filename))
+ (needsterm (assoc "needsterm"
+ (mailcap-mime-info
+ (car (mm-handle-type handle)) t)))
+ process file)
+ ;; We create a private sub-directory where we store our files.
+ (make-directory dir)
+ (set-file-modes dir 448)
+ (if filename
+ (setq file (expand-file-name (or filename "mm.") dir))
+ (setq file (make-temp-name (expand-file-name "mm." dir))))
(write-region (point-min) (point-max)
file nil 'nomesg nil 'no-conversion)
(setq process
- (start-process "*display*" nil shell-file-name
- "-c" (format method file)))
+ (if needsterm
+ (start-process "*display*" nil
+ "xterm"
+ "-e" (format method file))
+ (switch-to-buffer (generate-new-buffer "*mm*"))
+ (buffer-disable-undo)
+ (mm-set-buffer-file-coding-system 'no-conversion)
+ (start-process "*display*" (current-buffer)
+ shell-file-name
+ "-c" (format method file))))
(mm-handle-set-undisplayer handle (cons file process))
(message "Displaying %s..." (format method file))))))
(delete-file (car object))
(error nil))
(condition-case ()
+ (delete-directory (file-name-directory (car object)))
+ (error nil))
+ (condition-case ()
(kill-process (cdr object))
(error nil)))
((bufferp object)
(mm-decode-content-transfer-encoding (mm-handle-encoding handle))
(buffer-string)))
+(defvar mm-default-directory nil)
+
(defun mm-save-part (handle)
"Write HANDLE to a file."
(let* ((name (mail-content-type-get (mm-handle-type handle) 'name))
(setq file
(read-file-name "Save MIME part to: "
(expand-file-name
- (or filename name "") default-directory)))
+ (or filename name "")
+ (or mm-default-directory default-directory))))
+ (setq mm-default-directory (file-name-directory file))
(mm-with-unibyte-buffer
(insert-buffer-substring (mm-handle-buffer handle))
(mm-decode-content-transfer-encoding (mm-handle-encoding handle))
(device-type . ignore)
(coding-system-equal . equal)
(annotationp . ignore)
+ (set-buffer-file-coding-system . ignore)
(make-char
. (lambda (charset int)
(int-to-char int)))
(defvar mm-charset-coding-system-alist
(let ((rest
- '((us-ascii . iso-8859-1)
- (gb2312 . cn-gb-2312)
+ '((gb2312 . cn-gb-2312)
(iso-2022-jp-2 . iso-2022-7bit-ss2)
(x-ctext . ctext)))
(systems (mm-coding-system-list))
((and (null (mm-coding-system-list))
(memq charset mm-known-charsets))
charset)
+ ;; ascii
+ ((eq charset 'us-ascii)
+ 'ascii)
;; Check to see whether we can handle this charset.
((memq charset (mm-coding-system-list))
charset)
(cons (cons (point-min) (point-max))
major-mode))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(widen)
(setq buffer-read-only nil)
(fundamental-mode)
(setq nndoc-dissection-alist nil)
(save-excursion
(set-buffer nndoc-current-buffer)
+ (mm-enable-multibyte)
(erase-buffer)
(if (stringp nndoc-address)
(nnheader-insert-file-contents nndoc-address)
(save-excursion
(set-buffer (get-buffer-create nneething-work-buffer))
(setq case-fold-search nil)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(erase-buffer)
(cond
((not (file-exists-p file))
(minid (lsh -1 -1))
maxid start end newscantime
buffer-read-only)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq maxid (cdr active))
(goto-char (point-min))
(defun nnheader-set-temp-buffer (name &optional noerase)
"Set-buffer to an empty (possibly new) buffer called NAME with undo disabled."
(set-buffer (get-buffer-create name))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(unless noerase
(erase-buffer))
(current-buffer))
;; Let the backend save the article (or not).
(cond
((not duplication)
- (nnmail-cache-insert message-id)
(funcall func (setq group-art
- (nreverse (nnmail-article-group artnum-func)))))
+ (nreverse (nnmail-article-group artnum-func))))
+ (nnmail-cache-insert message-id))
((eq action 'delete)
(setq group-art nil))
((eq action 'warn)
(nnmbox-article-group-number)))))))
(deffoo nnmbox-request-group (group &optional server dont-check)
+ (nnmbox-possibly-change-newsgroup nil server)
(let ((active (cadr (assoc group nnmbox-group-alist))))
(cond
((or (null active)
(set-buffer (setq nnmbox-mbox-buffer
(nnheader-find-file-noselect
nnmbox-mbox-file nil 'raw)))
- (buffer-disable-undo (current-buffer))))
+ (mm-enable-multibyte)
+ (buffer-disable-undo)))
(when (not nnmbox-group-alist)
(nnmail-activate 'nnmbox))
(if newsgroup
(nnheader-find-file-noselect
nnmbox-mbox-file nil 'raw)))
(mm-enable-multibyte)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
;; Go through the group alist and compare against
;; the mbox file.
(save-excursion
;; Init the nov buffer.
(set-buffer nov-buffer)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(erase-buffer)
(set-buffer nntp-server-buffer)
;; Delete the old NOV file.
(when (file-exists-p (concat nnsoup-directory file))
(save-excursion ; Load the file.
(set-buffer (get-buffer-create buffer-name))
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(push (cons nnsoup-current-group (current-buffer)) nnsoup-buffers)
(nnheader-insert-file-contents (concat nnsoup-directory file))
(current-buffer))))))
(iso-8859-3 . Q)
(iso-8859-4 . Q)
(iso-8859-5 . B)
- (koi8-r . Q)
+ (koi8-r . B)
(iso-8859-7 . Q)
(iso-8859-8 . Q)
(iso-8859-9 . Q)
(goto-char (point-min))
(while (not (eobp))
(goto-char (min (point-max) (+ 64 (point))))
- (search-backward "=" nil (- (point) 2))
+ (search-backward "=" (- (point) 2) t)
(unless (eobp)
(insert "\n")))))))
If your Emacs implementation can't decode CHARSET, it returns nil."
(let ((cs (mm-charset-to-coding-system charset)))
(when cs
+ (when (eq cs 'ascii)
+ (setq cs rfc2047-default-charset))
(mm-decode-coding-string
(cond
((equal "B" encoding)
-@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
-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
-: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.
+
+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
+
+:end