From f67bb416dabaef9d9c5262d37dc36afd481a7bab Mon Sep 17 00:00:00 2001 From: jao Date: Wed, 7 Apr 2021 04:31:09 +0100 Subject: jao-doc-view-visit-url --- init.org | 3 ++- lib/doc/jao-doc-view.el | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/init.org b/init.org index bd2655b..d202e2b 100644 --- a/init.org +++ b/init.org @@ -1497,7 +1497,8 @@ :bind (:map doc-view-mode-map ("b" . jao-doc-view-back) ("B" . jao-doc-view-forward) - ("S" . jao-doc-view-save-session))) + ("S" . jao-doc-view-save-session) + ("u" . jao-doc-view-visit-url))) (use-package saveplace-pdf-view :ensure t :demand t :after doc-view) #+end_src diff --git a/lib/doc/jao-doc-view.el b/lib/doc/jao-doc-view.el index 762719b..5c6cbbc 100644 --- a/lib/doc/jao-doc-view.el +++ b/lib/doc/jao-doc-view.el @@ -181,5 +181,36 @@ (advice-add 'doc-view-goto-page :before #'jao-doc-view--trail-push) + +;;; Find URLs +(defun jao-doc-view--page-urls () + (if doc-view--current-converter-processes + (message "DocView: please wait till conversion finished.") + (let ((txt (expand-file-name "doc.txt" (doc-view--current-cache-dir))) + (page (doc-view-current-page))) + (if (file-readable-p txt) + (with-current-buffer (find-file-noselect txt) + (goto-char (point-min)) + (re-search-forward page-delimiter nil t (1- page)) + (let ((end (save-excursion + (if (re-search-forward page-delimiter nil t) + (point) + (point-max)))) + (urls)) + (while (re-search-forward "https?://" end t) + (push (thing-at-point-url-at-point) urls)) + urls)) + (doc-view-doc->txt txt 'jao-doc-view--page-urls))))) + +(defun jao-doc-view-visit-url () + "Visit URL displayed in this page." + (interactive nil doc-view-mode) + (let ((urls (jao-doc-view--page-urls))) + (if (null urls) + (message "No URLs in this page") + (when-let (url (completing-read "URL: " urls nil nil + (when (null (cdr urls)) (car urls)))) + (browse-url url))))) + (provide 'jao-doc-view) -- cgit v1.2.3