aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2021-01-29 23:58:58 -0500
committerStefan Monnier2021-01-30 12:27:34 -0500
commite1e9e4eefa41bacb6b412e57a569440a0847e4fa (patch)
treeddf2413d3fea71147ed1b3c616694068a23696a3
parent5577d441e518a36509af4302edd3ac957da14b3b (diff)
downloademacs-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.el367
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.
5079If FILE is given, use it for the external part." 5079If 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 "\
5086The current article has a complicated MIME structure, giving up...")) 5088The 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.
5119Replace it with some information about the removed part." 5121Replace 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.
5176Use CMD as the process." 5180Use 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.
5211If non-nil, PRED is a predicate to use during completion to limit the 5218If non-nil, PRED is a predicate to use during completion to limit the
5212available media-types." 5219available 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.
5248If `auto-compression-mode' is enabled, compressed files like .gz and .bz2 5257If `auto-compression-mode' is enabled, compressed files like .gz and .bz2
5249are decompressed." 5258are 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.
5329Compressed files like .gz and .bz2 are decompressed." 5342Compressed 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
5426specified charset." 5440specified 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.
5484If no internal viewer is available, use an external viewer." 5502If 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.
7871If the text at point has a `gnus-callback' property, 7891If the text at point has a `gnus-callback' property,
7872call it with the value of the `gnus-data' text property." 7892call 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.