+2002-01-30 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-wash-html-with-w3m): Add keymap
+ property to the buffer for using emacs-w3m command keys.
+
+ * mm-decode.el (mm-inline-text-html-with-w3m-keymap): New user
+ option.
+
+ * mm-view.el (mm-w3m-mode-map): New variable.
+ (mm-w3m-mode-command-alist): New variable.
+ (mm-w3m-minor-mode): Removed.
+ (mm-setup-w3m): Setup `mm-w3m-mode-map'; don't add minor mode.
+ (mm-inline-text-html-render-with-w3m): Add keymap property to the
+ buffer for using emacs-w3m command keys.
+
2002-01-29 ShengHuo ZHU <zsh@cs.rochester.edu>
* message.el (message-mode-syntax-table): Move forward.
(defun gnus-article-wash-html-with-w3m ()
"Wash the current buffer with emacs-w3m."
(mm-setup-w3m)
- (let ((w3m-safe-url-regexp "\\`cid:")
- (w3m-display-inline-images mm-inline-text-html-with-images))
- (w3m-region (point) (point-max)))
- (setq mm-w3m-minor-mode t))
+ (save-restriction
+ (narrow-to-region (point) (point-max))
+ (let ((w3m-safe-url-regexp "\\`cid:")
+ (w3m-display-inline-images mm-inline-text-html-with-images))
+ (w3m-region (point-min) (point-max)))
+ (when mm-inline-text-html-with-w3m-keymap
+ (add-text-properties
+ (point-min) (point-max)
+ (append '(mm-inline-text-html-with-w3m t)
+ (gnus-local-map-property mm-w3m-mode-map))))))
(defun article-hide-list-identifiers ()
"Remove list identifies from the Subject header.
:type 'boolean
:group 'mime-display)
+(defcustom mm-inline-text-html-with-w3m-keymap t
+ "If non-nil, use emacs-w3m command keys in the article buffer."
+ :type 'boolean
+ :group 'mime-display)
+
(defcustom mm-inline-media-tests
'(("image/jpeg"
mm-inline-image
(delete-region ,(point-min-marker)
,(point-max-marker)))))))))
-(defvar mm-w3m-minor-mode nil)
-(make-variable-buffer-local 'mm-w3m-minor-mode)
-(defvar mm-w3m-setup nil)
+(defvar mm-w3m-mode-map nil
+ "Local keymap for inlined text/html part rendered by emacs-w3m. It will
+be slightly different from `w3m-mode-map' to use in the article buffer.")
+
+(defvar mm-w3m-mode-command-alist
+ '((backward-char)
+ (describe-mode)
+ (forward-char)
+ (goto-line)
+ (next-line)
+ (previous-line)
+ (w3m-antenna)
+ (w3m-antenna-add-current-url)
+ (w3m-bookmark-add-current-url)
+ (w3m-bookmark-add-this-url)
+ (w3m-bookmark-view)
+ (w3m-close-window)
+ (w3m-copy-buffer)
+ (w3m-delete-buffer)
+ (w3m-dtree)
+ (w3m-edit-current-url)
+ (w3m-edit-this-url)
+ (w3m-gohome)
+ (w3m-goto-url)
+ (w3m-goto-url-new-session)
+ (w3m-history)
+ (w3m-history-restore-position)
+ (w3m-history-store-position)
+ (w3m-namazu)
+ (w3m-next-buffer)
+ (w3m-previous-buffer)
+ (w3m-quit)
+ (w3m-redisplay-with-charset)
+ (w3m-reload-this-page)
+ (w3m-scroll-down-or-previous-url)
+ (w3m-scroll-up-or-next-url)
+ (w3m-search)
+ (w3m-select-buffer)
+ (w3m-switch-buffer)
+ (w3m-view-header)
+ (w3m-view-parent-page)
+ (w3m-view-previous-page)
+ (w3m-view-source)
+ (w3m-weather))
+ "Alist of commands to use for emacs-w3m in the article buffer. Each
+element looks like (FROM-COMMAND . TO-COMMAND); FROM-COMMAND should be
+registered in `w3m-mode-map' which will be substituted by TO-COMMAND
+in `mm-w3m-mode-map'. If TO-COMMAND is nil, an article command key
+will not be substituted.")
+
+(defvar mm-w3m-setup nil
+ "Whether gnus-article-mode has been setup to use emacs-w3m.")
+
(defun mm-setup-w3m ()
+ "Setup gnus-article-mode to use emacs-w3m."
(unless mm-w3m-setup
(require 'w3m)
+ (unless mm-w3m-mode-map
+ (setq mm-w3m-mode-map (copy-keymap w3m-mode-map))
+ (dolist (def mm-w3m-mode-command-alist)
+ (condition-case nil
+ (substitute-key-definition (car def) (cdr def) mm-w3m-mode-map)
+ (error))))
(unless (assq 'gnus-article-mode w3m-cid-retrieve-function-alist)
(push (cons 'gnus-article-mode 'mm-w3m-cid-retrieve)
w3m-cid-retrieve-function-alist))
- (gnus-add-minor-mode 'mm-w3m-minor-mode " w3m" w3m-mode-map)
(setq mm-w3m-setup t)))
(defun mm-w3m-cid-retrieve (url &rest args)
+ "Insert a content pointed by URL if it has the cid: scheme."
(when (string-match "\\`cid:" url)
(setq url (concat "<" (substring url (match-end 0)) ">"))
(catch 'found-handle
(throw 'found-handle (mm-handle-media-type handle)))))))
(defun mm-inline-text-html-render-with-w3m (handle)
+ "Render a text/html part using emacs-w3m."
(mm-setup-w3m)
(let ((text (mm-get-part handle))
(b (point))
(let ((w3m-safe-url-regexp "\\`cid:")
(w3m-display-inline-images mm-inline-text-html-with-images))
(w3m-region (point-min) (point-max)))
- (setq mm-w3m-minor-mode t))
+ (when mm-inline-text-html-with-w3m-keymap
+ (add-text-properties
+ (point-min) (point-max)
+ (append '(mm-inline-text-html-with-w3m t)
+ (gnus-local-map-property mm-w3m-mode-map)))))
(mm-handle-set-undisplayer
handle
`(lambda ()
(let (buffer-read-only)
- (setq mm-w3m-minor-mode nil)
(if (functionp 'remove-specifier)
(mapcar (lambda (prop)
(remove-specifier
+2002-01-30 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * emacs-mime.texi (Customization): Move emacs-w3m stuff backward;
+ added documentation for `mm-inline-text-html-with-w3m-keymap'.
+
2002-01-28 ShengHuo ZHU <zsh@cs.rochester.edu>
* gnus.texi (Agent Expiry): Addition.
@table @code
-@item mm-inline-text-html-renderer
-@findex mm-inline-text-html-render-with-w3
-@findex mm-inline-text-html-render-with-w3m
-This function will be used to convert the HTML to the text. There are
-two pre-defined functions: @code{mm-inline-text-html-render-with-w3},
-which uses Emacs/w3; and @code{mm-inline-text-html-render-with-w3m},
-which uses emacs-w3m (see @uref{http://emacs-w3m.namazu.org/} for more
-information about emacs-w3m). The function will be called with a MIME
-handle as the argument.
-
-@item mm-inline-text-html-with-images
-Some HTML mails might have the trick of spammers using @samp{<img>} tags.
-It is likely to be intended to verify whether you have read the mail.
-You can prevent your personal informations from leaking by setting this
-option to @code{nil} (which is the default). It is currently ignored by
-Emacs/w3. For emacs-w3m, you may use the command @kbd{t} on the image
-anchor to show an image even if it is @code{nil}.
-
@item mm-inline-media-tests
This is an alist where the key is a @sc{mime} type, the second element
is a function to display the part @dfn{inline} (i.e., inside Emacs), and
includes @samp{text/.*}, then including @samp{text/html} in this
variable will cause @samp{text/html} parts to be treated as attachments.
+@item mm-inline-text-html-renderer
+@findex mm-inline-text-html-render-with-w3
+@findex mm-inline-text-html-render-with-w3m
+This function will be used to convert the HTML to the text. There are
+two pre-defined functions: @code{mm-inline-text-html-render-with-w3},
+which uses Emacs/w3; and @code{mm-inline-text-html-render-with-w3m},
+which uses emacs-w3m (see @uref{http://emacs-w3m.namazu.org/} for more
+information about emacs-w3m). The function will be called with a MIME
+handle as the argument.
+
+@item mm-inline-text-html-with-images
+Some HTML mails might have the trick of spammers using @samp{<img>} tags.
+It is likely to be intended to verify whether you have read the mail.
+You can prevent your personal informations from leaking by setting this
+option to @code{nil} (which is the default). It is currently ignored by
+Emacs/w3. For emacs-w3m, you may use the command @kbd{t} on the image
+anchor to show an image (or @kbd{T} for loading all images) even if it
+is @code{nil}.
+
+@item mm-inline-text-html-with-w3m-keymap
+You can use emacs-w3m command keys in the inlined text/html part by
+setting this option to non-@code{nil}. The default value is @code{t}.
+
@end table