[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/gnus/gnus-art.el,v
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/gnus/gnus-art.el,v |
Date: |
Thu, 19 Apr 2007 12:08:54 +0000 |
CVSROOT: /cvsroot/emacs
Module name: emacs
Changes by: Miles Bader <miles> 07/04/19 12:08:53
Index: gnus-art.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/gnus/gnus-art.el,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -b -r1.124 -r1.125
--- gnus-art.el 31 Mar 2007 09:43:42 -0000 1.124
+++ gnus-art.el 19 Apr 2007 12:08:53 -0000 1.125
@@ -4606,6 +4606,21 @@
(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 @@
(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 @@
(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")
+ (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
- (unless (mm-handle-cache handle)
- (mm-extern-cache-contents handle))
- (mm-handle-cache handle))
- handle))
- charset (assq 'charset (cdr type)))
- (delq charset type)
+ (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 @@
(funcall (cdr action-pair)))))
(defun gnus-article-part-wrapper (n function)
- (save-current-buffer
- (set-buffer gnus-article-buffer)
+ (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))))
+ (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."
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/lisp/gnus/gnus-art.el,v,
Miles Bader <=