我从 mutt 切换到 gnus,并希望从电子邮件中提取 url,并能够启动一个包含给定电子邮件中所有 url 的新缓冲区。Urlview 为 mutt 做这件事,作为我正在寻找的参考框架。
user284244
问问题
593 次
2 回答
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,Tyler 的方法会更简单。
于 2011-02-13T05:24:03.297 回答
1
我不认为该功能是内置的。以下代码将执行您想要的操作。从摘要缓冲区中,调用 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。所以我刷了他的那部分代码。
于 2011-02-13T05:50:27.060 回答