gnus 有 urlview (a la mutt) 吗?或者只是用于提取网址的elisp?

5 emacs elisp conkeror gnus

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

Jos*_*Gay 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))))
Run Code Online (Sandbox Code Playgroud)

我应该澄清,这是为了从文章缓冲区内运行。另外,我可能错过了重点,因为按照你所说的字面意思启动一个包含网址的新缓冲区,在这种情况下,你可以将最后一个表单更改为:

(when urls
  (dolist (url urls)
    (browse-url url)))
Run Code Online (Sandbox Code Playgroud)

或者,如果您不需要解析小部件 url,那么 Tyler 的方法会更简单。