Я написал следующее и протестировал его для работы над парой статей.Может быть, это будет хорошей отправной точкой для вас.
(defun gnus-article-extract-url-into-buffer ()
(interactive)
(let ((simple-url-regexp "https?://")
urls)
(save-excursion
;; collect text URLs
(while (search-forward-regexp simple-url-regexp nil t)
(when-let (url (thing-at-point 'url))
(setq urls (cons url urls))))
(beginning-of-buffer)
;; collect widget URLs
(while (not (eobp))
(goto-char (next-overlay-change (point)))
(when-let (link (get-text-property (point) 'gnus-string))
(and (string-match simple-url-regexp link)
(setq urls (cons link urls))))
(goto-char (next-overlay-change (point)))))
(when urls
(switch-to-buffer-other-window "*gnus-article-urls*")
(dolist (url urls)
(insert url))
(beginning-of-buffer))))
Я должен уточнить, что это предназначено для запуска из буфера статьи.Кроме того, я, возможно, упустил из виду то, что вы сказали буквально о запуске нового буфера, содержащего URL-адреса, и в этом случае вы можете изменить последнюю форму на:
(when urls
(dolist (url urls)
(browse-url url)))
Или подход Тайлера будет проще, есливам не нужно анализировать URL виджета.