From 5dd64cbc0b91ca9ec6bb1eecca030393ded6e549 Mon Sep 17 00:00:00 2001 From: jao Date: Mon, 12 Apr 2021 03:51:23 +0100 Subject: zathura support improvements --- lib/doc/jao-doc-view.el | 39 +++++++++++++++++++++++---------------- lib/doc/jao-org-links.el | 5 ++++- 2 files changed, 27 insertions(+), 17 deletions(-) (limited to 'lib/doc') diff --git a/lib/doc/jao-doc-view.el b/lib/doc/jao-doc-view.el index 93bf316..e19839a 100644 --- a/lib/doc/jao-doc-view.el +++ b/lib/doc/jao-doc-view.el @@ -100,11 +100,11 @@ (image-set-window-vscroll (round (/ (* height (cdr (pdf-view-image-size))) (frame-char-height)))))) -(defun jao-doc-view-pdf-outline () +(defun jao-doc-view-pdf-outline (&optional file-name) (if (derived-mode-p 'pdf-view-mode) (pdf-info-outline) (let ((outline nil) - (fn (shell-quote-argument (buffer-file-name)))) + (fn (shell-quote-argument (or file-name (buffer-file-name))))) (with-temp-buffer (insert (shell-command-to-string (format "mutool show %s outline" fn))) (goto-char (point-min)) @@ -115,13 +115,13 @@ outline))) (nreverse outline)))) -(defun jao-doc-view-section-title (&optional page) +(defun jao-doc-view-section-title (&optional page file-name) (when (not jao--pdf-outline) - (setq-local jao--pdf-outline (jao-doc-view-pdf-outline))) + (setq-local jao--pdf-outline (jao-doc-view-pdf-outline file-name))) (let ((page (or page (jao-doc-view-current-page))) (outline jao--pdf-outline) (cur-page 0) - (cur-title (jao-doc-view-title buffer-file-name))) + (cur-title (jao-doc-view-title (or file-name buffer-file-name "title")))) (while (and (car outline) (< cur-page page)) (setq cur-page (cdr (assoc 'page (car outline)))) (when (<= cur-page page) @@ -138,14 +138,20 @@ ;;; imenu -(defun jao-doc-view--enable-imenu () - (setq-local imenu-create-index-function #'jao-doc-view--imenu-create-index) +(defvar-local jao-doc-view--imenu-file nil) +(defvar-local jao-doc-view--goer 'jao-doc-view-goto-page) + +(defun jao-doc-view--enable-imenu (&optional file-name goto-page) + (setq-local imenu-create-index-function #'jao-doc-view--imenu-create-index + jao-doc-view--imenu-file file-name + jao-doc-view--goer (or goto-page 'jao-doc-view-goto-page)) (imenu-add-to-menubar "PDF outline")) (defun jao-doc-view--imenu-create-index () (let (index) (dolist (item (or jao--pdf-outline - (setq jao--pdf-outline (jao-doc-view-pdf-outline)))) + (setq jao--pdf-outline + (jao-doc-view-pdf-outline jao-doc-view--imenu-file)))) (let-alist item (let* ((lvl (make-string (max 0 (1- .level)) ?.)) (title (format "%s%s (%s)" lvl .title .page))) @@ -154,7 +160,7 @@ (defun jao-doc-view--go (&rest args) (when-let (item (car (last args))) - (let-alist item (jao-doc-view-goto-page .page)))) + (let-alist item (funcall jao-doc-view--goer .page)))) (add-hook 'doc-view-mode-hook #'jao-doc-view--enable-imenu) @@ -186,29 +192,30 @@ ;;; Find URLs -(defun jao-doc-view--page-urls () +(defun jao-doc-view--page-urls (all) (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)) + (pd-rx (rx (+ (literal page-delimiter)))) (urls)) (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)) + (unless all (re-search-forward pd-rx nil t (1- page))) (let ((end (save-excursion - (if (re-search-forward page-delimiter nil t) + (if (and (not all) (re-search-forward pd-rx nil t)) (point) (point-max))))) (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))))) + (doc-view-doc->txt txt (lambda () (jao-doc-view--page-urls all))))))) -(defun jao-doc-view-visit-url () +(defun jao-doc-view-visit-url (all) "Visit URL displayed in this page." - (interactive nil doc-view-mode) - (let ((urls (jao-doc-view--page-urls))) + (interactive "P" doc-view-mode) + (let ((urls (jao-doc-view--page-urls all))) (if (zerop (length urls)) (message "No URLs in this page") (when-let (url (completing-read "URL: " urls nil nil diff --git a/lib/doc/jao-org-links.el b/lib/doc/jao-org-links.el index 5848698..ab07498 100644 --- a/lib/doc/jao-org-links.el +++ b/lib/doc/jao-org-links.el @@ -49,7 +49,10 @@ (let ((f (replace-regexp-in-string "^file:" "doc:" (org-file-complete-link arg)))) (if (jao-doc-view-is-pdf f) - (concat f "::" (read-from-minibuffer "Page: " "1")) + (let ((page (read-from-minibuffer "Page: " ""))) + (if (> (string-to-number page) 0) + (concat f "::" (read-from-minibuffer "Page: " "")) + f)) f)))) (defun jao-org-links-open-mail (fname) -- cgit v1.2.3