diff options
| author | Stefan Monnier | 2021-01-29 23:58:58 -0500 |
|---|---|---|
| committer | Stefan Monnier | 2021-01-30 12:27:34 -0500 |
| commit | e1e9e4eefa41bacb6b412e57a569440a0847e4fa (patch) | |
| tree | ddf2413d3fea71147ed1b3c616694068a23696a3 | |
| parent | 5577d441e518a36509af4302edd3ac957da14b3b (diff) | |
| download | emacs-e1e9e4eefa41bacb6b412e57a569440a0847e4fa.tar.gz emacs-e1e9e4eefa41bacb6b412e57a569440a0847e4fa.zip | |
* lisp/gnus/gnus-art.el: Add `event` args and operate at its position.
(gnus-mime-save-part-and-strip)
(gnus-mime-delete-part, gnus-mime-save-part, gnus-mime-pipe-part)
(gnus-mime-view-part, gnus-mime-view-part-as-type)
(gnus-mime-copy-part, gnus-mime-print-part, gnus-mime-inline-part)
(gnus-mime-view-part-as-charset, gnus-mime-view-part-externally)
(gnus-mime-view-part-internally, gnus-article-press-button):
Add `event` arg and operate at its position.
| -rw-r--r-- | lisp/gnus/gnus-art.el | 367 |
1 files changed, 194 insertions, 173 deletions
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 588e75384a6..6a66dc65421 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el | |||
| @@ -2707,7 +2707,7 @@ If READ-CHARSET, ask for a coding system." | |||
| 2707 | "Format an HTML article." | 2707 | "Format an HTML article." |
| 2708 | (interactive) | 2708 | (interactive) |
| 2709 | (let ((handles nil) | 2709 | (let ((handles nil) |
| 2710 | (buffer-read-only nil)) | 2710 | (inhibit-read-only t)) |
| 2711 | (when (gnus-buffer-live-p gnus-original-article-buffer) | 2711 | (when (gnus-buffer-live-p gnus-original-article-buffer) |
| 2712 | (with-current-buffer gnus-original-article-buffer | 2712 | (with-current-buffer gnus-original-article-buffer |
| 2713 | (setq handles (mm-dissect-buffer t t)))) | 2713 | (setq handles (mm-dissect-buffer t t)))) |
| @@ -5074,50 +5074,53 @@ and `gnus-mime-delete-part', and not provided at run-time normally." | |||
| 5074 | file)) | 5074 | file)) |
| 5075 | (gnus-mime-save-part-and-strip file)) | 5075 | (gnus-mime-save-part-and-strip file)) |
| 5076 | 5076 | ||
| 5077 | (defun gnus-mime-save-part-and-strip (&optional file) | 5077 | (defun gnus-mime-save-part-and-strip (&optional file event) |
| 5078 | "Save the MIME part under point then replace it with an external body. | 5078 | "Save the MIME part under point then replace it with an external body. |
| 5079 | If FILE is given, use it for the external part." | 5079 | If FILE is given, use it for the external part." |
| 5080 | (interactive) | 5080 | (interactive (list nil last-nonmenu-event)) |
| 5081 | (gnus-article-check-buffer) | 5081 | (save-excursion |
| 5082 | (when (gnus-group-read-only-p) | 5082 | (mouse-set-point event) |
| 5083 | (error "The current group does not support deleting of parts")) | 5083 | (gnus-article-check-buffer) |
| 5084 | (when (mm-complicated-handles gnus-article-mime-handles) | 5084 | (when (gnus-group-read-only-p) |
| 5085 | (error "\ | 5085 | (error "The current group does not support deleting of parts")) |
| 5086 | (when (mm-complicated-handles gnus-article-mime-handles) | ||
| 5087 | (error "\ | ||
| 5086 | The current article has a complicated MIME structure, giving up...")) | 5088 | The current article has a complicated MIME structure, giving up...")) |
| 5087 | (let* ((data (get-text-property (point) 'gnus-data)) | 5089 | (let* ((data (get-text-property (point) 'gnus-data)) |
| 5088 | (id (get-text-property (point) 'gnus-part)) | 5090 | (id (get-text-property (point) 'gnus-part)) |
| 5089 | (handles gnus-article-mime-handles)) | 5091 | (handles gnus-article-mime-handles)) |
| 5090 | (unless file | 5092 | (unless file |
| 5091 | (setq file | 5093 | (setq file |
| 5092 | (and data (mm-save-part data "Delete MIME part and save to: ")))) | 5094 | (and data (mm-save-part data "Delete MIME part and save to: ")))) |
| 5093 | (when file | 5095 | (when file |
| 5094 | (with-current-buffer (mm-handle-buffer data) | 5096 | (with-current-buffer (mm-handle-buffer data) |
| 5095 | (erase-buffer) | 5097 | (erase-buffer) |
| 5096 | (insert "Content-Type: " (mm-handle-media-type data)) | 5098 | (insert "Content-Type: " (mm-handle-media-type data)) |
| 5097 | (mml-insert-parameter-string (cdr (mm-handle-type data)) | 5099 | (mml-insert-parameter-string (cdr (mm-handle-type data)) |
| 5098 | '(charset)) | 5100 | '(charset)) |
| 5099 | ;; Add a filename for the sake of saving the part again. | 5101 | ;; Add a filename for the sake of saving the part again. |
| 5100 | (mml-insert-parameter | 5102 | (mml-insert-parameter |
| 5101 | (mail-header-encode-parameter "name" (file-name-nondirectory file))) | 5103 | (mail-header-encode-parameter "name" (file-name-nondirectory file))) |
| 5102 | (insert "\n") | 5104 | (insert "\n") |
| 5103 | (insert "Content-ID: " (message-make-message-id) "\n") | 5105 | (insert "Content-ID: " (message-make-message-id) "\n") |
| 5104 | (insert "Content-Transfer-Encoding: binary\n") | 5106 | (insert "Content-Transfer-Encoding: binary\n") |
| 5105 | (insert "\n")) | 5107 | (insert "\n")) |
| 5106 | (setcdr data | 5108 | (setcdr data |
| 5107 | (cdr (mm-make-handle nil | 5109 | (cdr (mm-make-handle nil |
| 5108 | `("message/external-body" | 5110 | `("message/external-body" |
| 5109 | (access-type . "LOCAL-FILE") | 5111 | (access-type . "LOCAL-FILE") |
| 5110 | (name . ,file))))) | 5112 | (name . ,file))))) |
| 5111 | ;; (set-buffer gnus-summary-buffer) | 5113 | ;; (set-buffer gnus-summary-buffer) |
| 5112 | (gnus-article-edit-part handles id)))) | 5114 | (gnus-article-edit-part handles id))))) |
| 5113 | 5115 | ||
| 5114 | ;; A function like `gnus-summary-save-parts' (`X m', `<MIME> <Extract all | 5116 | ;; A function like `gnus-summary-save-parts' (`X m', `<MIME> <Extract all |
| 5115 | ;; parts...>') but with stripping would be nice. | 5117 | ;; parts...>') but with stripping would be nice. |
| 5116 | 5118 | ||
| 5117 | (defun gnus-mime-delete-part () | 5119 | (defun gnus-mime-delete-part (&optional event) |
| 5118 | "Delete the MIME part under point. | 5120 | "Delete the MIME part under point. |
| 5119 | Replace it with some information about the removed part." | 5121 | Replace it with some information about the removed part." |
| 5120 | (interactive) | 5122 | (interactive (list last-nonmenu-event)) |
| 5123 | (mouse-set-point event) | ||
| 5121 | (gnus-article-check-buffer) | 5124 | (gnus-article-check-buffer) |
| 5122 | (when (gnus-group-read-only-p) | 5125 | (when (gnus-group-read-only-p) |
| 5123 | (error "The current group does not support deleting of parts")) | 5126 | (error "The current group does not support deleting of parts")) |
| @@ -5163,33 +5166,37 @@ Deleting parts may malfunction or destroy the article; continue? ")) | |||
| 5163 | ;; (set-buffer gnus-summary-buffer) | 5166 | ;; (set-buffer gnus-summary-buffer) |
| 5164 | (gnus-article-edit-part handles id)))) | 5167 | (gnus-article-edit-part handles id)))) |
| 5165 | 5168 | ||
| 5166 | (defun gnus-mime-save-part () | 5169 | (defun gnus-mime-save-part (&optional event) |
| 5167 | "Save the MIME part under point." | 5170 | "Save the MIME part under point." |
| 5168 | (interactive) | 5171 | (interactive (list last-nonmenu-event)) |
| 5172 | (mouse-set-point event) | ||
| 5169 | (gnus-article-check-buffer) | 5173 | (gnus-article-check-buffer) |
| 5170 | (let ((data (get-text-property (point) 'gnus-data))) | 5174 | (let ((data (get-text-property (point) 'gnus-data))) |
| 5171 | (when data | 5175 | (when data |
| 5172 | (mm-save-part data)))) | 5176 | (mm-save-part data)))) |
| 5173 | 5177 | ||
| 5174 | (defun gnus-mime-pipe-part (&optional cmd) | 5178 | (defun gnus-mime-pipe-part (&optional cmd event) |
| 5175 | "Pipe the MIME part under point to a process. | 5179 | "Pipe the MIME part under point to a process. |
| 5176 | Use CMD as the process." | 5180 | Use CMD as the process." |
| 5177 | (interactive) | 5181 | (interactive (list nil last-nonmenu-event)) |
| 5182 | (mouse-set-point event) | ||
| 5178 | (gnus-article-check-buffer) | 5183 | (gnus-article-check-buffer) |
| 5179 | (let ((data (get-text-property (point) 'gnus-data))) | 5184 | (let ((data (get-text-property (point) 'gnus-data))) |
| 5180 | (when data | 5185 | (when data |
| 5181 | (mm-pipe-part data cmd)))) | 5186 | (mm-pipe-part data cmd)))) |
| 5182 | 5187 | ||
| 5183 | (defun gnus-mime-view-part () | 5188 | (defun gnus-mime-view-part (&optional event) |
| 5184 | "Interactively choose a viewing method for the MIME part under point." | 5189 | "Interactively choose a viewing method for the MIME part under point." |
| 5185 | (interactive) | 5190 | (interactive (list last-nonmenu-event)) |
| 5186 | (gnus-article-check-buffer) | 5191 | (save-excursion |
| 5187 | (let ((data (get-text-property (point) 'gnus-data))) | 5192 | (mouse-set-point event) |
| 5188 | (when data | 5193 | (gnus-article-check-buffer) |
| 5189 | (setq gnus-article-mime-handles | 5194 | (let ((data (get-text-property (point) 'gnus-data))) |
| 5190 | (mm-merge-handles | 5195 | (when data |
| 5191 | gnus-article-mime-handles (setq data (copy-sequence data)))) | 5196 | (setq gnus-article-mime-handles |
| 5192 | (mm-interactively-view-part data)))) | 5197 | (mm-merge-handles |
| 5198 | gnus-article-mime-handles (setq data (copy-sequence data)))) | ||
| 5199 | (mm-interactively-view-part data))))) | ||
| 5193 | 5200 | ||
| 5194 | (defun gnus-mime-view-part-as-type-internal () | 5201 | (defun gnus-mime-view-part-as-type-internal () |
| 5195 | (gnus-article-check-buffer) | 5202 | (gnus-article-check-buffer) |
| @@ -5206,48 +5213,51 @@ Use CMD as the process." | |||
| 5206 | '("text/plain" . 0)) | 5213 | '("text/plain" . 0)) |
| 5207 | '("application/octet-stream" . 0)))) | 5214 | '("application/octet-stream" . 0)))) |
| 5208 | 5215 | ||
| 5209 | (defun gnus-mime-view-part-as-type (&optional mime-type pred) | 5216 | (defun gnus-mime-view-part-as-type (&optional mime-type pred event) |
| 5210 | "Choose a MIME media type, and view the part as such. | 5217 | "Choose a MIME media type, and view the part as such. |
| 5211 | If non-nil, PRED is a predicate to use during completion to limit the | 5218 | If non-nil, PRED is a predicate to use during completion to limit the |
| 5212 | available media-types." | 5219 | available media-types." |
| 5213 | (interactive) | 5220 | (interactive (list nil nil last-nonmenu-event)) |
| 5214 | (unless mime-type | 5221 | (save-excursion |
| 5215 | (setq mime-type | 5222 | (if event (mouse-set-point event)) |
| 5216 | (let ((default (gnus-mime-view-part-as-type-internal))) | 5223 | (unless mime-type |
| 5217 | (gnus-completing-read | 5224 | (setq mime-type |
| 5218 | "View as MIME type" | 5225 | (let ((default (gnus-mime-view-part-as-type-internal))) |
| 5219 | (if pred | 5226 | (gnus-completing-read |
| 5220 | (seq-filter pred (mailcap-mime-types)) | 5227 | "View as MIME type" |
| 5221 | (mailcap-mime-types)) | 5228 | (if pred |
| 5222 | nil nil nil | 5229 | (seq-filter pred (mailcap-mime-types)) |
| 5223 | (car default))))) | 5230 | (mailcap-mime-types)) |
| 5224 | (gnus-article-check-buffer) | 5231 | nil nil nil |
| 5225 | (let ((handle (get-text-property (point) 'gnus-data))) | 5232 | (car default))))) |
| 5226 | (when handle | 5233 | (gnus-article-check-buffer) |
| 5227 | (when (equal (mm-handle-media-type handle) "message/external-body") | 5234 | (let ((handle (get-text-property (point) 'gnus-data))) |
| 5228 | (unless (mm-handle-cache handle) | 5235 | (when handle |
| 5229 | (mm-extern-cache-contents handle)) | 5236 | (when (equal (mm-handle-media-type handle) "message/external-body") |
| 5230 | (setq handle (mm-handle-cache handle))) | 5237 | (unless (mm-handle-cache handle) |
| 5231 | (setq handle | 5238 | (mm-extern-cache-contents handle)) |
| 5232 | (mm-make-handle (mm-handle-buffer handle) | 5239 | (setq handle (mm-handle-cache handle))) |
| 5233 | (cons mime-type (cdr (mm-handle-type handle))) | 5240 | (setq handle |
| 5234 | (mm-handle-encoding handle) | 5241 | (mm-make-handle (mm-handle-buffer handle) |
| 5235 | (mm-handle-undisplayer handle) | 5242 | (cons mime-type (cdr (mm-handle-type handle))) |
| 5236 | (mm-handle-disposition handle) | 5243 | (mm-handle-encoding handle) |
| 5237 | (mm-handle-description handle) | 5244 | (mm-handle-undisplayer handle) |
| 5238 | nil | 5245 | (mm-handle-disposition handle) |
| 5239 | (mm-handle-id handle))) | 5246 | (mm-handle-description handle) |
| 5240 | (setq gnus-article-mime-handles | 5247 | nil |
| 5241 | (mm-merge-handles gnus-article-mime-handles handle)) | 5248 | (mm-handle-id handle))) |
| 5242 | (when (mm-handle-displayed-p handle) | 5249 | (setq gnus-article-mime-handles |
| 5243 | (mm-remove-part handle)) | 5250 | (mm-merge-handles gnus-article-mime-handles handle)) |
| 5244 | (gnus-mm-display-part handle)))) | 5251 | (when (mm-handle-displayed-p handle) |
| 5245 | 5252 | (mm-remove-part handle)) | |
| 5246 | (defun gnus-mime-copy-part (&optional handle arg) | 5253 | (gnus-mm-display-part handle))))) |
| 5254 | |||
| 5255 | (defun gnus-mime-copy-part (&optional handle arg event) | ||
| 5247 | "Put the MIME part under point into a new buffer. | 5256 | "Put the MIME part under point into a new buffer. |
| 5248 | If `auto-compression-mode' is enabled, compressed files like .gz and .bz2 | 5257 | If `auto-compression-mode' is enabled, compressed files like .gz and .bz2 |
| 5249 | are decompressed." | 5258 | are decompressed." |
| 5250 | (interactive (list nil current-prefix-arg)) | 5259 | (interactive (list nil current-prefix-arg last-nonmenu-event)) |
| 5260 | (mouse-set-point event) | ||
| 5251 | (gnus-article-check-buffer) | 5261 | (gnus-article-check-buffer) |
| 5252 | (unless handle | 5262 | (unless handle |
| 5253 | (setq handle (get-text-property (point) 'gnus-data))) | 5263 | (setq handle (get-text-property (point) 'gnus-data))) |
| @@ -5299,15 +5309,18 @@ are decompressed." | |||
| 5299 | (setq buffer-file-name nil)) | 5309 | (setq buffer-file-name nil)) |
| 5300 | (goto-char (point-min))))) | 5310 | (goto-char (point-min))))) |
| 5301 | 5311 | ||
| 5302 | (defun gnus-mime-print-part (&optional handle filename) | 5312 | (defun gnus-mime-print-part (&optional handle filename event) |
| 5303 | "Print the MIME part under point." | 5313 | "Print the MIME part under point." |
| 5304 | (interactive (list nil (ps-print-preprint current-prefix-arg))) | 5314 | (interactive |
| 5305 | (gnus-article-check-buffer) | 5315 | (list nil (ps-print-preprint current-prefix-arg) last-nonmenu-event)) |
| 5306 | (let* ((handle (or handle (get-text-property (point) 'gnus-data))) | 5316 | (save-excursion |
| 5307 | (contents (and handle (mm-get-part handle))) | 5317 | (mouse-set-point event) |
| 5308 | (file (make-temp-file (expand-file-name "mm." mm-tmp-directory))) | 5318 | (gnus-article-check-buffer) |
| 5309 | (printer (mailcap-mime-info (mm-handle-media-type handle) "print"))) | 5319 | (let* ((handle (or handle (get-text-property (point) 'gnus-data))) |
| 5310 | (when contents | 5320 | (contents (and handle (mm-get-part handle))) |
| 5321 | (file (make-temp-file (expand-file-name "mm." mm-tmp-directory))) | ||
| 5322 | (printer (mailcap-mime-info (mm-handle-media-type handle) "print"))) | ||
| 5323 | (when contents | ||
| 5311 | (if printer | 5324 | (if printer |
| 5312 | (unwind-protect | 5325 | (unwind-protect |
| 5313 | (progn | 5326 | (progn |
| @@ -5322,12 +5335,13 @@ are decompressed." | |||
| 5322 | (with-temp-buffer | 5335 | (with-temp-buffer |
| 5323 | (insert contents) | 5336 | (insert contents) |
| 5324 | (gnus-print-buffer)) | 5337 | (gnus-print-buffer)) |
| 5325 | (ps-despool filename))))) | 5338 | (ps-despool filename)))))) |
| 5326 | 5339 | ||
| 5327 | (defun gnus-mime-inline-part (&optional handle arg) | 5340 | (defun gnus-mime-inline-part (&optional handle arg event) |
| 5328 | "Insert the MIME part under point into the current buffer. | 5341 | "Insert the MIME part under point into the current buffer. |
| 5329 | Compressed files like .gz and .bz2 are decompressed." | 5342 | Compressed files like .gz and .bz2 are decompressed." |
| 5330 | (interactive (list nil current-prefix-arg)) | 5343 | (interactive (list nil current-prefix-arg last-nonmenu-event)) |
| 5344 | (if event (mouse-set-point event)) | ||
| 5331 | (gnus-article-check-buffer) | 5345 | (gnus-article-check-buffer) |
| 5332 | (let* ((inhibit-read-only t) | 5346 | (let* ((inhibit-read-only t) |
| 5333 | (b (point)) | 5347 | (b (point)) |
| @@ -5421,82 +5435,88 @@ CHARSET may either be a string or a symbol." | |||
| 5421 | (setcdr param charset) | 5435 | (setcdr param charset) |
| 5422 | (setcdr type (cons (cons 'charset charset) (cdr type))))))) | 5436 | (setcdr type (cons (cons 'charset charset) (cdr type))))))) |
| 5423 | 5437 | ||
| 5424 | (defun gnus-mime-view-part-as-charset (&optional handle arg) | 5438 | (defun gnus-mime-view-part-as-charset (&optional handle arg event) |
| 5425 | "Insert the MIME part under point into the current buffer using the | 5439 | "Insert the MIME part under point into the current buffer using the |
| 5426 | specified charset." | 5440 | specified charset." |
| 5427 | (interactive (list nil current-prefix-arg)) | 5441 | (interactive (list nil current-prefix-arg last-nonmenu-event)) |
| 5428 | (gnus-article-check-buffer) | 5442 | (save-excursion |
| 5429 | (let ((handle (or handle (get-text-property (point) 'gnus-data))) | 5443 | (mouse-set-point event) |
| 5430 | (fun (get-text-property (point) 'gnus-callback)) | 5444 | (gnus-article-check-buffer) |
| 5431 | (gnus-newsgroup-ignored-charsets 'gnus-all) | 5445 | (let ((handle (or handle (get-text-property (point) 'gnus-data))) |
| 5432 | charset form preferred parts) | 5446 | (fun (get-text-property (point) 'gnus-callback)) |
| 5433 | (when handle | 5447 | (gnus-newsgroup-ignored-charsets 'gnus-all) |
| 5434 | (when (prog1 | 5448 | charset form preferred parts) |
| 5435 | (and fun | ||
| 5436 | (setq charset | ||
| 5437 | (or (cdr (assq | ||
| 5438 | arg | ||
| 5439 | gnus-summary-show-article-charset-alist)) | ||
| 5440 | (read-coding-system "Charset: ")))) | ||
| 5441 | (if (mm-handle-undisplayer handle) | ||
| 5442 | (mm-remove-part handle))) | ||
| 5443 | (gnus-mime-set-charset-parameters handle charset) | ||
| 5444 | (when (and (consp (setq form (cdr-safe fun))) | ||
| 5445 | (setq form (ignore-errors | ||
| 5446 | (assq 'gnus-mime-display-alternative form))) | ||
| 5447 | (setq preferred (caddr form)) | ||
| 5448 | (progn | ||
| 5449 | (when (eq (car preferred) 'quote) | ||
| 5450 | (setq preferred (cadr preferred))) | ||
| 5451 | (not (equal preferred | ||
| 5452 | (get-text-property (point) 'gnus-data)))) | ||
| 5453 | (setq parts (get-text-property (point) 'gnus-part)) | ||
| 5454 | (setq parts (cdr (assq parts | ||
| 5455 | gnus-article-mime-handle-alist))) | ||
| 5456 | (equal (mm-handle-media-type parts) "multipart/alternative") | ||
| 5457 | (setq parts (reverse (cdr parts)))) | ||
| 5458 | (setcar (cddr form) | ||
| 5459 | (list 'quote (or (cadr (member preferred parts)) | ||
| 5460 | (car parts))))) | ||
| 5461 | (funcall fun handle))))) | ||
| 5462 | |||
| 5463 | (defun gnus-mime-view-part-externally (&optional handle) | ||
| 5464 | "View the MIME part under point with an external viewer." | ||
| 5465 | (interactive) | ||
| 5466 | (gnus-article-check-buffer) | ||
| 5467 | (let* ((handle (or handle (get-text-property (point) 'gnus-data))) | ||
| 5468 | (mm-inlined-types nil) | ||
| 5469 | (mail-parse-charset gnus-newsgroup-charset) | ||
| 5470 | (mail-parse-ignored-charsets | ||
| 5471 | (with-current-buffer gnus-summary-buffer | ||
| 5472 | gnus-newsgroup-ignored-charsets)) | ||
| 5473 | (type (mm-handle-media-type handle)) | ||
| 5474 | (method (mailcap-mime-info type)) | ||
| 5475 | (mm-enable-external t)) | ||
| 5476 | (if (not (stringp method)) | ||
| 5477 | (gnus-mime-view-part-as-type | ||
| 5478 | nil (lambda (type) (stringp (mailcap-mime-info type)))) | ||
| 5479 | (when handle | 5449 | (when handle |
| 5480 | (mm-display-part handle nil t))))) | 5450 | (when (prog1 |
| 5481 | 5451 | (and fun | |
| 5482 | (defun gnus-mime-view-part-internally (&optional handle) | 5452 | (setq charset |
| 5453 | (or (cdr (assq | ||
| 5454 | arg | ||
| 5455 | gnus-summary-show-article-charset-alist)) | ||
| 5456 | (read-coding-system "Charset: ")))) | ||
| 5457 | (if (mm-handle-undisplayer handle) | ||
| 5458 | (mm-remove-part handle))) | ||
| 5459 | (gnus-mime-set-charset-parameters handle charset) | ||
| 5460 | (when (and (consp (setq form (cdr-safe fun))) | ||
| 5461 | (setq form (ignore-errors | ||
| 5462 | (assq 'gnus-mime-display-alternative form))) | ||
| 5463 | (setq preferred (caddr form)) | ||
| 5464 | (progn | ||
| 5465 | (when (eq (car preferred) 'quote) | ||
| 5466 | (setq preferred (cadr preferred))) | ||
| 5467 | (not (equal preferred | ||
| 5468 | (get-text-property (point) 'gnus-data)))) | ||
| 5469 | (setq parts (get-text-property (point) 'gnus-part)) | ||
| 5470 | (setq parts (cdr (assq parts | ||
| 5471 | gnus-article-mime-handle-alist))) | ||
| 5472 | (equal (mm-handle-media-type parts) "multipart/alternative") | ||
| 5473 | (setq parts (reverse (cdr parts)))) | ||
| 5474 | (setcar (cddr form) | ||
| 5475 | (list 'quote (or (cadr (member preferred parts)) | ||
| 5476 | (car parts))))) | ||
| 5477 | (funcall fun handle)))))) | ||
| 5478 | |||
| 5479 | (defun gnus-mime-view-part-externally (&optional handle event) | ||
| 5480 | "View the MIME part under point with an external viewer." | ||
| 5481 | (interactive (list nil last-nonmenu-event)) | ||
| 5482 | (save-excursion | ||
| 5483 | (mouse-set-point event) | ||
| 5484 | (gnus-article-check-buffer) | ||
| 5485 | (let* ((handle (or handle (get-text-property (point) 'gnus-data))) | ||
| 5486 | (mm-inlined-types nil) | ||
| 5487 | (mail-parse-charset gnus-newsgroup-charset) | ||
| 5488 | (mail-parse-ignored-charsets | ||
| 5489 | (with-current-buffer gnus-summary-buffer | ||
| 5490 | gnus-newsgroup-ignored-charsets)) | ||
| 5491 | (type (mm-handle-media-type handle)) | ||
| 5492 | (method (mailcap-mime-info type)) | ||
| 5493 | (mm-enable-external t)) | ||
| 5494 | (if (not (stringp method)) | ||
| 5495 | (gnus-mime-view-part-as-type | ||
| 5496 | nil (lambda (type) (stringp (mailcap-mime-info type)))) | ||
| 5497 | (when handle | ||
| 5498 | (mm-display-part handle nil t)))))) | ||
| 5499 | |||
| 5500 | (defun gnus-mime-view-part-internally (&optional handle event) | ||
| 5483 | "View the MIME part under point with an internal viewer. | 5501 | "View the MIME part under point with an internal viewer. |
| 5484 | If no internal viewer is available, use an external viewer." | 5502 | If no internal viewer is available, use an external viewer." |
| 5485 | (interactive) | 5503 | (interactive (list nil last-nonmenu-event)) |
| 5486 | (gnus-article-check-buffer) | 5504 | (save-excursion |
| 5487 | (let* ((handle (or handle (get-text-property (point) 'gnus-data))) | 5505 | (mouse-set-point event) |
| 5488 | (mm-inlined-types '(".*")) | 5506 | (gnus-article-check-buffer) |
| 5489 | (mm-inline-large-images t) | 5507 | (let* ((handle (or handle (get-text-property (point) 'gnus-data))) |
| 5490 | (mail-parse-charset gnus-newsgroup-charset) | 5508 | (mm-inlined-types '(".*")) |
| 5491 | (mail-parse-ignored-charsets | 5509 | (mm-inline-large-images t) |
| 5492 | (with-current-buffer gnus-summary-buffer | 5510 | (mail-parse-charset gnus-newsgroup-charset) |
| 5493 | gnus-newsgroup-ignored-charsets)) | 5511 | (mail-parse-ignored-charsets |
| 5494 | (inhibit-read-only t)) | 5512 | (with-current-buffer gnus-summary-buffer |
| 5495 | (if (not (mm-inlinable-p handle)) | 5513 | gnus-newsgroup-ignored-charsets)) |
| 5496 | (gnus-mime-view-part-as-type | 5514 | (inhibit-read-only t)) |
| 5497 | nil (lambda (type) (mm-inlinable-p handle type))) | 5515 | (if (not (mm-inlinable-p handle)) |
| 5498 | (when handle | 5516 | (gnus-mime-view-part-as-type |
| 5499 | (gnus-bind-mm-vars (mm-display-part handle nil t)))))) | 5517 | nil (lambda (type) (mm-inlinable-p handle type))) |
| 5518 | (when handle | ||
| 5519 | (gnus-bind-mm-vars (mm-display-part handle nil t))))))) | ||
| 5500 | 5520 | ||
| 5501 | (defun gnus-mime-action-on-part (&optional action) | 5521 | (defun gnus-mime-action-on-part (&optional action) |
| 5502 | "Do something with the MIME attachment at (point)." | 5522 | "Do something with the MIME attachment at (point)." |
| @@ -7866,15 +7886,16 @@ call it with the value of the `gnus-data' text property." | |||
| 7866 | (when fun | 7886 | (when fun |
| 7867 | (funcall fun data)))) | 7887 | (funcall fun data)))) |
| 7868 | 7888 | ||
| 7869 | (defun gnus-article-press-button () | 7889 | (defun gnus-article-press-button (&optional event) |
| 7870 | "Check text at point for a callback function. | 7890 | "Check text at point for a callback function. |
| 7871 | If the text at point has a `gnus-callback' property, | 7891 | If the text at point has a `gnus-callback' property, |
| 7872 | call it with the value of the `gnus-data' text property." | 7892 | call it with the value of the `gnus-data' text property." |
| 7873 | (interactive) | 7893 | (interactive (list last-nonmenu-event)) |
| 7874 | (let ((data (get-text-property (point) 'gnus-data)) | 7894 | (save-excursion |
| 7875 | (fun (get-text-property (point) 'gnus-callback))) | 7895 | (mouse-set-point event) |
| 7876 | (when fun | 7896 | (let ((fun (get-text-property (point) 'gnus-callback))) |
| 7877 | (funcall fun data)))) | 7897 | (when fun |
| 7898 | (funcall fun (get-text-property (point) 'gnus-data)))))) | ||
| 7878 | 7899 | ||
| 7879 | (defun gnus-article-highlight (&optional force) | 7900 | (defun gnus-article-highlight (&optional force) |
| 7880 | "Highlight current article. | 7901 | "Highlight current article. |