[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-w3m
- From: Katsumi Yamaoka <yamaoka@xxxxxxx>
- Date: Thu, 24 Jan 2002 11:38:36 +0900
- X-ml-name: emacs-w3m
- X-mail-count: 02584
Hi,
Emacs-w3m is yet another web browser for Emacsen. It is light
and fast for rendering html contents, because it uses the
external command w3m. Emacs-w3m can also show images inline
under XEmacs or Emacs 21+. Why don't we use emacs-w3m for
converting text/html parts on Gnus? I wish to install the
attached patch to Gnus CVS by myself. Do you have any
objections?
If you are interested in emacs-w3m, visit the following web
site:
http://emacs-w3m.namazu.org/
Note that you have to install both the lisp package emacs-w3m
and the external command w3m to make your Emacs web browser,
and some programs (e.g. gifsicle, ImageMagick, etc.) will help
you. See the documentations for details.
2002-01-24 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-decode.el (mm-inline-text-use-emacs-w3m): New user option.
(mm-inline-media-tests): Check for w3m instead of w3 if
`mm-inline-text-use-emacs-w3m' is non-nil.
* mm-view.el (mm-inline-text-html-with-w3): New function separated
from `mm-inline-text'.
(w3m-region, w3m-mode-map): Bind them when compiling.
(mm-w3m-minor-mode): New variable.
(mm-w3m-setup): New variable.
(mm-setup-w3m): New function.
(mm-inline-text-html-with-w3m): New function.
(mm-inline-text): Use `mm-inline-text-html-with-w3m' or
`mm-inline-text-html-with-w3' to convert html part.
The original code which uses `defadvice' was posted in the news:
From: greg@visiontech-dml.com
Newsgroups: gnu.emacs.help
Subject: Re: w3m-mode and images
Date: 19 Jul 2001 10:59:19 +0300
Message-ID: <2fasnftcpt4.fsf@broadcom.com>
--- mm-decode.el~ Tue Jan 22 21:54:08 2002
+++ mm-decode.el Thu Jan 24 02:36:27 2002
@@ -95,6 +95,11 @@
`(list ,buffer ,type ,encoding ,undisplayer
,disposition ,description ,cache ,id))
+(defcustom mm-inline-text-use-emacs-w3m nil
+ "If non-nil, use emacs-w3m to show html parts. Otherwise, use emacs-w3."
+ :type 'boolean
+ :group 'mime-display)
+
(defcustom mm-inline-media-tests
'(("image/jpeg"
mm-inline-image
@@ -147,7 +152,9 @@
("text/html"
mm-inline-text
(lambda (handle)
- (locate-library "w3")))
+ (if mm-inline-text-use-emacs-w3m
+ (locate-library "w3m")
+ (locate-library "w3"))))
("text/x-vcard"
mm-inline-text
(lambda (handle)
--- mm-view.el~ Mon Jan 14 22:01:28 2002
+++ mm-view.el Thu Jan 24 02:36:27 2002
@@ -81,81 +81,124 @@
(require 'url-vars)
(setq mm-w3-setup t)))
+(defun mm-inline-text-html-with-w3 (handle)
+ (mm-setup-w3)
+ (let ((text (mm-get-part handle))
+ (b (point))
+ (url-standalone-mode t)
+ (w3-honor-stylesheets nil)
+ (w3-delay-image-loads t)
+ (url-current-object
+ (url-generic-parse-url (format "cid:%s" (mm-handle-id handle))))
+ (width (window-width))
+ (charset (mail-content-type-get
+ (mm-handle-type handle) 'charset)))
+ (save-excursion
+ (insert text)
+ (save-restriction
+ (narrow-to-region b (point))
+ (goto-char (point-min))
+ (if (or (and (boundp 'w3-meta-content-type-charset-regexp)
+ (re-search-forward
+ w3-meta-content-type-charset-regexp nil t))
+ (and (boundp 'w3-meta-charset-content-type-regexp)
+ (re-search-forward
+ w3-meta-charset-content-type-regexp nil t)))
+ (setq charset
+ (or (let ((bsubstr (buffer-substring-no-properties
+ (match-beginning 2)
+ (match-end 2))))
+ (if (fboundp 'w3-coding-system-for-mime-charset)
+ (w3-coding-system-for-mime-charset bsubstr)
+ (mm-charset-to-coding-system bsubstr)))
+ charset)))
+ (delete-region (point-min) (point-max))
+ (insert (mm-decode-string text charset))
+ (save-window-excursion
+ (save-restriction
+ (let ((w3-strict-width width)
+ ;; Don't let w3 set the global version of
+ ;; this variable.
+ (fill-column fill-column)
+ (w3-honor-stylesheets nil)
+ (w3-delay-image-loads t)
+ (url-standalone-mode t))
+ (condition-case var
+ (w3-region (point-min) (point-max))
+ (error
+ (delete-region (point-min) (point-max))
+ (let ((b (point))
+ (charset (mail-content-type-get
+ (mm-handle-type handle) 'charset)))
+ (if (or (eq charset 'gnus-decoded)
+ (eq mail-parse-charset 'gnus-decoded))
+ (save-restriction
+ (narrow-to-region (point) (point))
+ (mm-insert-part handle)
+ (goto-char (point-max)))
+ (insert (mm-decode-string (mm-get-part handle)
+ charset))))
+ (message
+ "Error while rendering html; showing as text/plain"))))))
+ (mm-handle-set-undisplayer
+ handle
+ `(lambda ()
+ (let (buffer-read-only)
+ (if (functionp 'remove-specifier)
+ (mapcar (lambda (prop)
+ (remove-specifier
+ (face-property 'default prop)
+ (current-buffer)))
+ '(background background-pixmap foreground)))
+ (delete-region ,(point-min-marker)
+ ,(point-max-marker)))))))))
+
+(eval-when-compile
+ (autoload 'w3m-region "w3m")
+ (defvar w3m-mode-map))
+
+(defvar mm-w3m-minor-mode nil)
+(make-variable-buffer-local 'mm-w3m-minor-mode)
+(defvar mm-w3m-setup nil)
+(defun mm-setup-w3m ()
+ (unless mm-w3m-setup
+ (require 'w3m)
+ (gnus-add-minor-mode 'mm-w3m-minor-mode " w3m" w3m-mode-map)
+ (setq mm-w3m-setup t)))
+
+(defun mm-inline-text-html-with-w3m (handle)
+ (mm-setup-w3m)
+ (let ((text (mm-get-part handle))
+ (b (point)))
+ (save-excursion
+ (insert text)
+ (save-restriction
+ (narrow-to-region b (point))
+ (goto-char (point-min))
+ (w3m-region (point-min) (point-max))
+ (setq mm-w3m-minor-mode t))
+ (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
+ (face-property 'default prop)
+ (current-buffer)))
+ '(background background-pixmap foreground)))
+ (delete-region ,(point-min-marker)
+ ,(point-max-marker))))))))
+
(defun mm-inline-text (handle)
(let ((type (mm-handle-media-subtype handle))
- text buffer-read-only)
+ buffer-read-only)
(cond
((equal type "html")
- (mm-setup-w3)
- (setq text (mm-get-part handle))
- (let ((b (point))
- (url-standalone-mode t)
- (w3-honor-stylesheets nil)
- (w3-delay-image-loads t)
- (url-current-object
- (url-generic-parse-url (format "cid:%s" (mm-handle-id handle))))
- (width (window-width))
- (charset (mail-content-type-get
- (mm-handle-type handle) 'charset)))
- (save-excursion
- (insert text)
- (save-restriction
- (narrow-to-region b (point))
- (goto-char (point-min))
- (if (or (and (boundp 'w3-meta-content-type-charset-regexp)
- (re-search-forward
- w3-meta-content-type-charset-regexp nil t))
- (and (boundp 'w3-meta-charset-content-type-regexp)
- (re-search-forward
- w3-meta-charset-content-type-regexp nil t)))
- (setq charset
- (or (let ((bsubstr (buffer-substring-no-properties
- (match-beginning 2)
- (match-end 2))))
- (if (fboundp 'w3-coding-system-for-mime-charset)
- (w3-coding-system-for-mime-charset bsubstr)
- (mm-charset-to-coding-system bsubstr)))
- charset)))
- (delete-region (point-min) (point-max))
- (insert (mm-decode-string text charset))
- (save-window-excursion
- (save-restriction
- (let ((w3-strict-width width)
- ;; Don't let w3 set the global version of
- ;; this variable.
- (fill-column fill-column)
- (w3-honor-stylesheets nil)
- (w3-delay-image-loads t)
- (url-standalone-mode t))
- (condition-case var
- (w3-region (point-min) (point-max))
- (error
- (delete-region (point-min) (point-max))
- (let ((b (point))
- (charset (mail-content-type-get
- (mm-handle-type handle) 'charset)))
- (if (or (eq charset 'gnus-decoded)
- (eq mail-parse-charset 'gnus-decoded))
- (save-restriction
- (narrow-to-region (point) (point))
- (mm-insert-part handle)
- (goto-char (point-max)))
- (insert (mm-decode-string (mm-get-part handle)
- charset))))
- (message
- "Error while rendering html; showing as text/plain"))))))
- (mm-handle-set-undisplayer
- handle
- `(lambda ()
- (let (buffer-read-only)
- (if (functionp 'remove-specifier)
- (mapcar (lambda (prop)
- (remove-specifier
- (face-property 'default prop)
- (current-buffer)))
- '(background background-pixmap foreground)))
- (delete-region ,(point-min-marker)
- ,(point-max-marker)))))))))
+ (if mm-inline-text-use-emacs-w3m
+ (mm-inline-text-html-with-w3m handle)
+ (mm-inline-text-html-with-w3 handle)))
((equal type "x-vcard")
(mm-insert-inline
handle