+1998-09-24 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+
+ * lisp/gnus.el (gnus-version-number): Update to 6.10.021.
+
+ * Sync up with Pterodactyl Gnus 0.31.
+
1998-09-23 Katsumi Yamaoka <yamaoka@jpl.org>
* lisp/message.el (message-make-user-agent): Add extended version
+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.
- (if expired
- (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)
(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)
(gnus-run-hooks 'gnus-article-mode-hook))
(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))
"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 from to :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
(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)
+(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.
(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)
(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
(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
(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)
(defconst gnus-product-name "T-gnus"
"Product name of this version of gnus.")
-(defconst gnus-version-number "6.10.020"
+(defconst gnus-version-number "6.10.021"
"Version number for this version of gnus.")
-(defconst gnus-original-version-number "0.31"
+(defconst gnus-original-version-number "0.32"
"Version number for this version of Gnus.")
(defconst gnus-original-product-name "Pterodactyl Gnus"
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
find-charset-region base64-decode-string
base64-encode-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
url-view-url w3-prepare-buffer
char-int
annotationp delete-annotation make-image-specifier
- make-annotation base64-decode-string base64-encode-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)
(unwind-protect
(save-excursion
(set-buffer tembuf)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(erase-buffer)
(insert-buffer message-encoding-buffer)
;; Remove some headers.
(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
(set-buffer (setq nnmbox-mbox-buffer
(nnheader-find-file-noselect
nnmbox-mbox-file nil 'raw)))
- (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)
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Semi-gnus 6.10.020 Manual
+@settitle Semi-gnus 6.10.021 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Semi-gnus 6.10.020 Manual
+@title Semi-gnus 6.10.021 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.020.
+This manual corresponds to Semi-gnus 6.10.021.
@end ifinfo
word scoring process will never bring down the score of an article to
below this number. The default is @code{nil}.
+@vindex gnus-adative-word-no-group-words
+If @code{gnus-adative-word-no-group-words} is set to t, gnus won't
+adaptively word score any of the words in the group name. Useful for
+groups like comp.editors.emacs, where most of the subject lines contain
+the word "emacs".
+
After using this scheme for a while, it might be nice to write a
@code{gnus-psychoanalyze-user} command to go through the rules and see
what words you like and what words you don't like. Or perhaps not.
Sam Falkner,
Nelson Jose dos Santos Ferreira,
Sigbjorn Finne,
+Paul Fisher,
Decklin Foster,
Gary D. Foster,
Paul Franklin,
Wolfgang Rupprecht,
Jay Sachs,
Dewey M. Sasser,
+Conrad Sauerwald,
Loren Schall,
Dan Schmidt,
Ralph Schleicher,
The jingle is only played on the second invocation of Gnus.
@item
+gnus-ignored-mime-types to avoid seeing buttons for Vcards and the
+like.
+
+@item
+Boucing articles should do MIME.
+
+@item
Solve the halting problem.
@c TODO
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Pterodactyl Message 0.31 Manual
+@settitle Pterodactyl Message 0.32 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Pterodactyl Message 0.31 Manual
+@title Pterodactyl Message 0.32 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Pterodactyl Message 0.31. Message is
+This manual corresponds to Pterodactyl Message 0.32. Message is
distributed with the Gnus distribution bearing the same version number
as this manual.