aboutsummaryrefslogtreecommitdiff
path: root/emacs/.emacs.d/lisp/my/my-gnus.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs/.emacs.d/lisp/my/my-gnus.el')
-rw-r--r--emacs/.emacs.d/lisp/my/my-gnus.el32
1 files changed, 32 insertions, 0 deletions
diff --git a/emacs/.emacs.d/lisp/my/my-gnus.el b/emacs/.emacs.d/lisp/my/my-gnus.el
index aee03b5..1f7ff18 100644
--- a/emacs/.emacs.d/lisp/my/my-gnus.el
+++ b/emacs/.emacs.d/lisp/my/my-gnus.el
@@ -323,5 +323,37 @@ The archiving target comes from `my-gnus-group-alist'."
(message "Displaying %s..." command))
'external)))))))
+(defun my-gnus-article-copy-region (beg end)
+ "Copy an gnus article region from beginning to end, links included."
+ (interactive "r")
+ (let ((pairs)
+ (copied (buffer-substring-no-properties beg end))
+ (inhibit-message t))
+ (save-excursion
+ (goto-char beg)
+ (when-let* ((button (button-at (point)))
+ (url (button-get button 'shr-url)))
+ (push (cons (buffer-substring-no-properties
+ (button-start button)
+ (button-end button))
+ url)
+ pairs))
+ (while (and (shr-next-link)
+ (<= (point) end))
+ (let ((button (button-at (point))))
+ (push (cons (buffer-substring-no-properties
+ (button-start button)
+ (button-end button))
+ (button-get button 'shr-url))
+ pairs)))
+ (pcase-dolist (`(,label . ,url) (reverse pairs))
+ (setq copied
+ (concat copied
+ (format "[%s] %s\n" label url)))))
+ (kill-new copied)
+ (setq deactivate-mark t)
+ (let ((inhibit-message nil))
+ (message "Copied region with %d links." (length pairs)))))
+
(provide 'my-gnus)
;;; my-gnus.el ends here