Есть ли urlview (a la mutt) для gnus? Или просто elisp для извлечения URL-адресов?
Я переключился с Mutt на Gnus и хотел бы извлечь URL-адреса из электронных писем и иметь возможность запустить новый буфер, который содержит все URL-адреса в данном письме. Urlview делает это для mutt в качестве ориентира для того, что я ищу.
2 ответа
Я написал следующее и протестировал его для работы над парой статей. Может быть, это будет хорошей отправной точкой для вас.
(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 виджетов.
Я не думаю, что эта функция встроена. Следующий код будет делать то, что вы хотите. Из суммарного буфера вызовите Mx urlview или привяжите его к удобной клавише. Оболочка save-excursion должна вернуть вас обратно в буфер итоговых данных, но по какой-то причине она оставляет вас в буфере статей. Простое нажатие клавиши h вернет вас назад, но вам не нужно этого делать. Может быть, кто-то еще может уточнить эту часть?
(defun urlview ()
(interactive)
(save-excursion
(gnus-summary-select-article-buffer)
(beginning-of-buffer)
(while
(re-search-forward "https?://" nil t)
(browse-url-at-point))))
Изменить: ответ Джозефа работает как для http и https, которые я пропустил. Так что я пролистал эту часть его кода.