From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.emacs.gnus.general/42488 Path: main.gmane.org!not-for-mail From: Katsumi Yamaoka Newsgroups: gmane.emacs.gnus.general Subject: emacs-w3m Date: Thu, 24 Jan 2002 11:38:36 +0900 Organization: Emacsen advocacy group Sender: owner-ding@hpc.uh.edu Message-ID: NNTP-Posting-Host: coloc-standby.netfonds.no Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: main.gmane.org 1035177722 12011 80.91.224.250 (21 Oct 2002 05:22:02 GMT) X-Complaints-To: usenet@main.gmane.org NNTP-Posting-Date: Mon, 21 Oct 2002 05:22:02 +0000 (UTC) Cc: emacs-w3m@namazu.org Return-Path: Original-Received: (qmail 18567 invoked from network); 24 Jan 2002 02:39:31 -0000 Original-Received: from malifon.math.uh.edu (mail@129.7.128.13) by mastaler.com with SMTP; 24 Jan 2002 02:39:31 -0000 Original-Received: from sina.hpc.uh.edu ([129.7.128.10] ident=lists) by malifon.math.uh.edu with esmtp (Exim 3.20 #1) id 16TZnB-0007r8-00; Wed, 23 Jan 2002 20:39:09 -0600 Original-Received: by sina.hpc.uh.edu (TLB v0.09a (1.20 tibbs 1996/10/09 22:03:07)); Wed, 23 Jan 2002 20:39:00 -0600 (CST) Original-Received: from sclp3.sclp.com (qmailr@sclp3.sclp.com [209.196.61.66]) by sina.hpc.uh.edu (8.9.3/8.9.3) with SMTP id UAA12716 for ; Wed, 23 Jan 2002 20:38:45 -0600 (CST) Original-Received: (qmail 18558 invoked by alias); 24 Jan 2002 02:38:44 -0000 Original-Received: (qmail 18553 invoked from network); 24 Jan 2002 02:38:44 -0000 Original-Received: from groundpoundrecords.com (207.228.244.150) by gnus.org with SMTP; 24 Jan 2002 02:38:44 -0000 Original-Received: from yamaoka@jpl.org by groundpoundrecords.com (localhost [127.0.0.1]) (8.11.1/8.11.1) id g0O2ciM06745 Thu, 24 Jan 2002 11:38:44 +0900 (JST) Original-To: ding@gnus.org Mail-Copies-To: never X-Face: #kKnN,xUnmKia.'[pp`;Omh}odZK)?7wQSl"4o04=EixTF+V[""w~iNbM9ZL+.b*_CxUmFk B#Fu[*?MZZH@IkN:!"\w%I_zt>[$nm7nQosZ<3eu;B:$Q_:p!',P.c0-_Cy[dz4oIpw0ESA^D*1Lw= L&i*6&( User-Agent: Gnus/5.090006 (Oort Gnus v0.06) Emacs/21.2.50 (sparc-sun-solaris2.6) Cancel-Lock: sha1:lGD8MRamFH+VY3M/e0IeWptd9Tg= Precedence: list X-Majordomo: 1.94.jlt7 Xref: main.gmane.org gmane.emacs.gnus.general:42488 X-Report-Spam: http://spam.gmane.org/gmane.emacs.gnus.general:42488 --=-=-= 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 * 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> --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=w3m.patch --- 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 --=-=-=--