Есть ли urlview (a la mutt) для gnus? Или просто elisp для извлечения URL-адресов? - PullRequest
4 голосов
/ 13 февраля 2011

Я переключился с Mutt на Gnus и хотел бы извлечь URL из писем и иметь возможность запустить новый буфер, который содержит все URL в данном письме. Urlview делает это для mutt в качестве ориентира для того, что я ищу.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2011

Я написал следующее и протестировал его для работы над парой статей.Может быть, это будет хорошей отправной точкой для вас.

(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 виджета.

1 голос
/ 13 февраля 2011

Я не думаю, что эта функция встроена. Следующий код будет делать то, что вы хотите. Из итогового буфера вызовите M-x 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, которые я пропустил. Поэтому я пролистал эту часть его кода.

...