Emacs 是否有gnus的urlview(la mutt)?或者只是提取URL的elisp?

Emacs 是否有gnus的urlview(la mutt)?或者只是提取URL的elisp?,emacs,elisp,gnus,conkeror,Emacs,Elisp,Gnus,Conkeror,我从mutt切换到gnus,希望从电子邮件中提取URL,并能够启动一个包含给定电子邮件中所有URL的新缓冲区。Urlview为mutt做这件事,作为我寻找的参考框架 我写了以下内容,并在几篇文章中对其进行了测试。也许这对你来说是一个很好的起点 (defun gnus-article-extract-url-into-buffer () (interactive) (let ((simple-url-regexp "https?://") urls) (save-e

我从mutt切换到gnus,希望从电子邮件中提取URL,并能够启动一个包含给定电子邮件中所有URL的新缓冲区。Urlview为mutt做这件事,作为我寻找的参考框架

我写了以下内容,并在几篇文章中对其进行了测试。也许这对你来说是一个很好的起点

(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的方法更简单。

我不认为该功能是内置的。下面的代码将执行您想要的操作。从摘要缓冲区中,调用M-x urlview,或将其绑定到方便的键。保存偏移包装器应该将您放回摘要缓冲区,但由于某些原因,它会将您留在文章缓冲区中。只需按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))))

编辑:Joseph的答案适用于http和https,我忽略了这一点。所以我刷了他的那部分代码。

当let
不是内置的,但包含宏的示例实现时: