]> git.eshelyaron.com Git - emacs.git/commitdiff
Merge from gnus--rel--5.10
authorMiles Bader <miles@gnu.org>
Thu, 19 Apr 2007 12:08:53 +0000 (12:08 +0000)
committerMiles Bader <miles@gnu.org>
Thu, 19 Apr 2007 12:08:53 +0000 (12:08 +0000)
Patches applied:

 * gnus--rel--5.10  (patch 216)

   - Update from CVS

2007-04-19  Katsumi Yamaoka  <yamaoka@jpl.org>

   * lisp/gnus/gnus-art.el (gnus-mime-strip-charset-parameters): New function.
   (gnus-mime-view-part-as-charset): Use it; redisplay subpart currently
   displayed of multipart/alternative part if it is invoked from summary
   buffer.
   (gnus-article-part-wrapper): Select article window.

   * lisp/gnus/mm-view.el (mm-inline-text-html-render-with-w3m)
   (mm-inline-text-html-render-with-w3m-standalone)
   (mm-inline-render-with-function): Use mail-parse-charset by default.

Revision: emacs@sv.gnu.org/emacs--devo--0--patch-706

lisp/gnus/ChangeLog
lisp/gnus/gnus-art.el
lisp/gnus/mm-view.el

index 8f094dd6537ad58430bbbbe2480330fd93da75ad..b02dc6c2f8e9af5876313b2960b9b65bb1bda32e 100644 (file)
@@ -1,3 +1,15 @@
+2007-04-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-mime-strip-charset-parameters): New function.
+       (gnus-mime-view-part-as-charset): Use it; redisplay subpart currently
+       displayed of multipart/alternative part if it is invoked from summary
+       buffer.
+       (gnus-article-part-wrapper): Select article window.
+
+       * mm-view.el (mm-inline-text-html-render-with-w3m)
+       (mm-inline-text-html-render-with-w3m-standalone)
+       (mm-inline-render-with-function): Use mail-parse-charset by default.
+
 2007-04-10  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        * gnus-msg.el (gnus-inews-yank-articles): Use
index 552f3a68f498128b483c66c0a9788357be5bd5b6..6ae52b5eeddd83027acf4e203ebfb430a12ca60b 100644 (file)
@@ -4606,6 +4606,21 @@ are decompressed."
           (mm-string-to-multibyte contents)))
        (goto-char b)))))
 
+(defun gnus-mime-strip-charset-parameters (handle)
+  "Strip charset parameters from HANDLE."
+  (if (stringp (car handle))
+      (mapc #'gnus-mime-strip-charset-parameters (cdr handle))
+    (let* ((type (mm-handle-type (if (equal (mm-handle-media-type handle)
+                                           "message/external-body")
+                                    (progn
+                                      (unless (mm-handle-cache handle)
+                                        (mm-extern-cache-contents handle))
+                                      (mm-handle-cache handle))
+                                  handle)))
+          (charset (assq 'charset (cdr type))))
+      (when charset
+       (delq charset type)))))
+
 (defun gnus-mime-view-part-as-charset (&optional handle arg)
   "Insert the MIME part under point into the current buffer using the
 specified charset."
@@ -4614,7 +4629,7 @@ specified charset."
   (let ((handle (or handle (get-text-property (point) 'gnus-data)))
        (fun (get-text-property (point) 'gnus-callback))
        (gnus-newsgroup-ignored-charsets 'gnus-all)
-       gnus-newsgroup-charset type charset)
+       gnus-newsgroup-charset form preferred parts)
     (when handle
       (if (mm-handle-undisplayer handle)
          (mm-remove-part handle))
@@ -4622,17 +4637,24 @@ specified charset."
        (setq gnus-newsgroup-charset
              (or (cdr (assq arg gnus-summary-show-article-charset-alist))
                  (mm-read-coding-system "Charset: ")))
-       ;; Strip the charset parameter from `handle'.
-       (setq type (mm-handle-type
-                   (if (equal (mm-handle-media-type handle)
-                              "message/external-body")
-                       (progn
-                         (unless (mm-handle-cache handle)
-                           (mm-extern-cache-contents handle))
-                         (mm-handle-cache handle))
-                     handle))
-             charset (assq 'charset (cdr type)))
-       (delq charset type)
+       (gnus-mime-strip-charset-parameters handle)
+       (when (and (consp (setq form (cdr-safe fun)))
+                  (setq form (ignore-errors
+                               (assq 'gnus-mime-display-alternative form)))
+                  (setq preferred (caddr form))
+                  (progn
+                    (when (eq (car preferred) 'quote)
+                      (setq preferred (cadr preferred)))
+                    (not (equal preferred
+                                (get-text-property (point) 'gnus-data))))
+                  (setq parts (get-text-property (point) 'gnus-part))
+                  (setq parts (cdr (assq parts
+                                         gnus-article-mime-handle-alist)))
+                  (equal (mm-handle-media-type parts) "multipart/alternative")
+                  (setq parts (reverse (cdr parts))))
+         (setcar (cddr form)
+                 (list 'quote (or (cadr (member preferred parts))
+                                  (car parts)))))
        (funcall fun handle)))))
 
 (defun gnus-mime-view-part-externally (&optional handle)
@@ -4688,13 +4710,22 @@ If no internal viewer is available, use an external viewer."
        (funcall (cdr action-pair)))))
 
 (defun gnus-article-part-wrapper (n function)
-  (save-current-buffer
-    (set-buffer gnus-article-buffer)
-    (when (> n (length gnus-article-mime-handle-alist))
-      (error "No such part"))
-    (gnus-article-goto-part n)
-    (let ((handle (cdr (assq n gnus-article-mime-handle-alist))))
-      (funcall function handle))))
+  (let ((window (get-buffer-window gnus-article-buffer 'visible))
+       frame)
+    (when window
+      ;; It is necessary to select the article window so that
+      ;; `gnus-article-goto-part' may really move the point.
+      (setq frame (selected-frame))
+      (gnus-select-frame-set-input-focus (window-frame window))
+      (unwind-protect
+         (save-window-excursion
+           (select-window window)
+           (when (> n (length gnus-article-mime-handle-alist))
+             (error "No such part"))
+           (gnus-article-goto-part n)
+           (let ((handle (cdr (assq n gnus-article-mime-handle-alist))))
+             (funcall function handle)))
+       (gnus-select-frame-set-input-focus frame)))))
 
 (defun gnus-article-pipe-part (n)
   "Pipe MIME part N, which is the numerical prefix."
index 14d480fe7df76b6231f17e93d0676b0c051bb5dc..888c814bf2471131af75484351391e0341fd6d87 100644 (file)
   (mm-setup-w3m)
   (let ((text (mm-get-part handle))
        (b (point))
-       (charset (mail-content-type-get (mm-handle-type handle) 'charset)))
+       (charset (or (mail-content-type-get (mm-handle-type handle) 'charset)
+                    mail-parse-charset)))
     (save-excursion
       (insert (if charset (mm-decode-string text charset) text))
       (save-restriction
   "Render a text/html part using w3m."
   (if (mm-w3m-standalone-supports-m17n-p)
       (let ((source (mm-get-part handle))
-           (charset (mail-content-type-get (mm-handle-type handle) 'charset))
+           (charset (or (mail-content-type-get (mm-handle-type handle)
+                                               'charset)
+                        (symbol-name mail-parse-charset)))
            cs)
        (unless (and charset
                     (setq cs (mm-charset-to-coding-system charset))
 
 (defun mm-inline-render-with-function (handle func &rest args)
   (let ((source (mm-get-part handle))
-       (charset (mail-content-type-get (mm-handle-type handle) 'charset)))
+       (charset (or (mail-content-type-get (mm-handle-type handle) 'charset)
+                    mail-parse-charset)))
     (mm-insert-inline
      handle
      (mm-with-multibyte-buffer