diff options
Diffstat (limited to 'emacs/.emacs.d/lisp/my/my-gnus.el')
-rw-r--r-- | emacs/.emacs.d/lisp/my/my-gnus.el | 32 |
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 |