From 5dd64cbc0b91ca9ec6bb1eecca030393ded6e549 Mon Sep 17 00:00:00 2001 From: jao Date: Mon, 12 Apr 2021 03:51:23 +0100 Subject: zathura support improvements --- exwm.org | 25 ++++++++++++++++--------- lib/doc/jao-doc-view.el | 39 +++++++++++++++++++++++---------------- lib/doc/jao-org-links.el | 5 ++++- 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/exwm.org b/exwm.org index e984d29..3e3afc4 100644 --- a/exwm.org +++ b/exwm.org @@ -309,6 +309,9 @@ (dolist (k (string-to-list (kbd str))) (exwm-input--fake-key k))) + (defun jao-zathura-goto-page (page-no) + (jao-exwm--send-str (format "%sg" page-no))) + (defun jao-zathura-open-doc (file-name &optional page-no height) (let* ((file-name (expand-file-name file-name)) (buffer (seq-find `(lambda (b) @@ -321,7 +324,8 @@ (format "zathura -P %s %s" page-no file-name) (format "zathura %s" file-name))) (pop-to-buffer buffer) - (jao-exwm--send-str (format "%sg" page-no))))) + (jao-doc-view--enable-imenu file-name #'jao-zathura-goto-page) + (jao-zathura-goto-page page-no)))) (defun jao-exwm-pdf-zathura-close-all () (interactive) @@ -346,9 +350,10 @@ (defun jao-exwm-org-store-zathura-link () (when-let ((info (jao-zathura--file-info (current-buffer)))) - (jao-org-links-store-pdf-link (car info) - (cadr info) - (jao-doc-view-title (car info))))) + (let* ((file-name (car info)) + (page (cadr info)) + (desc (jao-doc-view-section-title page file-name))) + (jao-org-links-store-pdf-link file-name page desc)))) (defun jao-exwm-pdf-enable-zathura () (interactive) @@ -372,7 +377,7 @@ #+begin_src emacs-lisp (major-mode-hydra-define+ (doc-view-mode pdf-view-mode) nil ("External" - (("z" jao-exwm-open-with-zathura "open with zathura") + (("z" (jao-zathura-open-doc (buffer-file-name)) "open with zathura") ("m" jao-exwm-open-with-mupdf "open with mupdf")))) (defhydra jao-hydra-float (:color blue) @@ -423,9 +428,11 @@ ("s-w" jao-hydra-exwm/body nil)) "Network" (("S" jao-ssh "ssh") + ("T" telega "telegram rooster") ;; ("b" jao-exwm-bluetooth "bluetooth") ;; ("m" run-proton-bridge "proton bridge") - ("v" jao-exwm-proton-vpn "proton vpn")) + ;; ("v" jao-exwm-proton-vpn "proton vpn") + ("c" (jao-chats t) "connect chats")) "Monitors" (("p" jao-vterm-htop "htop") ;; ("P" jao-exwm-proced "proced") @@ -434,12 +441,12 @@ ;; ("t" jao-time-echo-times "current time") ) "Chats" - (("t" telega "telegram rooster") + (("t" (jao-buffer-same-mode 'telega-chat-mode) "telgram buffers") ("s" (jao-buffer-same-mode 'slack-message-buffer-mode) "slack buffers") ("i" (jao-buffer-same-mode 'circe-channel-mode) "irc channels")) "Looks" - (("T" jao-toggle-transparency "toggle transparency" - :toggle (jao-transparent-p) :color red) + (;; ("T" jao-toggle-transparency "toggle transparency" + ;; :toggle (jao-transparent-p) :color red) ("w" jao-set-wallpaper "set wallpaper") ("W" jao-set-random-wallpaper "set radom wallpaper")) "Helpers" 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