Function: gnus-mm-display-part
gnus-mm-display-part is a byte-compiled function defined in
gnus-art.el.gz.
Signature
(gnus-mm-display-part HANDLE)
Documentation
Display HANDLE and fix MIME button.
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/gnus-art.el.gz
(defun gnus-mm-display-part (handle)
"Display HANDLE and fix MIME button."
(let ((id (get-text-property (point) 'gnus-part))
(point (point))
(inhibit-read-only t)
(window (selected-window))
(mail-parse-charset gnus-newsgroup-charset)
(mail-parse-ignored-charsets
(if (gnus-buffer-live-p gnus-summary-buffer)
(with-current-buffer gnus-summary-buffer
gnus-newsgroup-ignored-charsets)
nil))
start retval)
(unwind-protect
(progn
(let ((win (gnus-get-buffer-window (current-buffer) t)))
(when win
(select-window win)
(goto-char point)))
(setq start (next-single-property-change point 'gnus-data
nil (point-max))
point (previous-single-property-change start 'gnus-data))
(if (mm-handle-displayed-p handle)
;; This will remove the part.
(setq point (copy-marker point)
retval (mm-display-part handle))
(let ((part (or (and (mm-inlinable-p handle)
(mm-inlined-p handle)
t)
(with-temp-buffer
(gnus-bind-mm-vars
(setq retval (mm-display-part handle)))
(unless (zerop (buffer-size))
(buffer-string))))))
(goto-char start)
(unless (bolp)
;; This is a header button.
(forward-line 1))
(cond ((stringp part)
(save-restriction
(narrow-to-region (point)
(progn
(insert part)
(unless (bolp) (insert "\n"))
(point)))
(gnus-treat-article nil id
(gnus-article-mime-total-parts)
(mm-handle-media-type handle))
(mm-handle-set-undisplayer
handle
(let ((beg (copy-marker (point-min) t))
(end (point-max-marker)))
(lambda ()
(let ((inhibit-read-only t))
(delete-region beg end)))))))
(part
(mm-display-inline handle))))))
(when (markerp point)
(setq point (prog1 (marker-position point)
(set-marker point nil))))
(goto-char point)
;; Toggle the button appearance between `[button]...' and `[button]'.
(let ((displayed-p (mm-handle-displayed-p handle)))
(gnus-insert-mime-button handle id (list displayed-p))
(delete-region
(point)
(next-single-property-change (point) 'gnus-data nil (point-max)))
(setq start (point))
(if (search-backward "\n\n" nil t)
(progn
(goto-char start)
(unless (or displayed-p (eolp))
;; Add extra newline.
(insert (propertize (buffer-substring (1- start) start)
'gnus-undeletable t))))
;; We're in the article header.
(delete-char -1)
(let ((ovl (make-overlay point (point))))
(overlay-put ovl 'gnus-button-attachment-extra t)
(overlay-put ovl 'evaporate t))
(save-restriction
(message-narrow-to-field)
(let ((gnus-treatment-function-alist
'((gnus-treat-highlight-headers
gnus-article-highlight-headers))))
(gnus-treat-article 'head)))))
(goto-char point)
(if (window-live-p window)
(select-window window)))
retval))