Function: gnus-mime-display-alternative

gnus-mime-display-alternative is a byte-compiled function defined in gnus-art.el.gz.

Signature

(gnus-mime-display-alternative HANDLES &optional PREFERRED IBEGEND ID)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-art.el.gz
(defun gnus-mime-display-alternative (handles &optional preferred ibegend id)
  (let* ((preferred (or preferred (mm-preferred-alternative handles)))
	 (ihandles handles)
	 (point (point))
	 (inhibit-read-only t) begend not-pref) ;; from
    (save-window-excursion
      (save-restriction
	(when ibegend
	  (narrow-to-region (car ibegend)
			    (or (cdr ibegend)
				(progn
				  (goto-char (car ibegend))
				  (forward-line 2)
				  (point))))
	  (delete-region (point-min) (point-max))
	  (mm-remove-parts handles))
	(setq begend (list (point-marker)))
	;; Do the toggle.
	(setq not-pref (or (cadr (member preferred ihandles))
                           (car ihandles)))
	(when (or ibegend
		  (not preferred)
		  (not (gnus-unbuttonized-mime-type-p
			"multipart/alternative")))
	  (add-text-properties
	   ;; (setq from
	   (point);; )
	   (progn
	     (insert (format "%d.  " id))
	     (point))
	   (let ((gamha gnus-article-mime-handle-alist))
	     `(gnus-callback
	       ,(lambda (_handles)
		  (unless (not ibegend)
		    (setq gnus-article-mime-handle-alist gamha))
		  (gnus-mime-display-alternative
		   ihandles not-pref begend id))
	       keymap ,gnus-mime-button-map
	       mouse-face ,gnus-article-mouse-face
	       face ,gnus-article-button-face
	       follow-link t
	       gnus-part ,id
	       article-type multipart
	       rear-nonsticky t)))
	  ;; Do the handles
	  (dolist (handle handles)
	    (add-text-properties
	     ;; (setq from
	     (point) ;; )
	     (progn
	       (insert (format "(%c) %-18s"
			       (if (equal handle preferred) ?* ? )
			       (mm-handle-media-type handle)))
	       (point))
	     (let ((gamha gnus-article-mime-handle-alist))
	       `(gnus-callback
		 ,(lambda (_handles)
		    (unless (not ibegend)
		      (setq gnus-article-mime-handle-alist gamha))
		    (gnus-mime-display-alternative
		     ihandles handle begend id))
		 keymap ,gnus-mime-button-map
		 mouse-face ,gnus-article-mouse-face
		 face ,gnus-article-button-face
		 follow-link t
		 gnus-part ,id
		 button t
		 category t
		 gnus-data ,handle
		 rear-nonsticky t)))
	    (insert "  "))
	  (insert "\n\n"))
	(when preferred
	  (if (stringp (car preferred))
	      (gnus-display-mime preferred)
	    (let ((mail-parse-charset gnus-newsgroup-charset)
		  (mail-parse-ignored-charsets
                   (and (buffer-live-p gnus-summary-buffer)
                        (with-current-buffer gnus-summary-buffer
                          gnus-newsgroup-ignored-charsets))))
	      (gnus-bind-mm-vars (mm-display-part preferred))
	      ;; Do highlighting.
	      (save-excursion
		(save-restriction
		  (narrow-to-region (car begend) (point-max))
		  (gnus-treat-article
		   nil (length gnus-article-mime-handle-alist)
		   (gnus-article-mime-total-parts)
		   (mm-handle-media-type preferred))))))
	  (goto-char (point-max))
	  (setcdr begend (point-marker)))))
    (when ibegend
      (goto-char point)))
  ;; Redraw attachment buttons in the header.
  (when gnus-mime-display-attachment-buttons-in-header
    (gnus-mime-buttonize-attachments-in-header)))