From d2454a9fd3fc590ac23312a21a03a5d7117f4df2 Mon Sep 17 00:00:00 2001 From: jao Date: Thu, 15 Apr 2021 16:16:03 +0100 Subject: zathura as a fully featured alternative for pdf viewing in emacs --- exwm.org | 36 ++++++++++++++++++++++++++++-------- init.org | 1 - lib/doc/jao-doc-view.el | 7 ++++--- org.org | 1 - 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/exwm.org b/exwm.org index 3e3afc4..8c7cff1 100644 --- a/exwm.org +++ b/exwm.org @@ -312,20 +312,29 @@ (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)) + (defun jao-zathura-open-doc (&optional file-name page-no height) + (let* ((file-name (expand-file-name (or file-name (buffer-file-name)))) (buffer (seq-find `(lambda (b) (string= ,file-name (car (jao-zathura--file-info b)))) - (jao-zathura--buffers)))) + (jao-zathura--buffers))) + (page-no (or page-no (jao-doc-view-current-page)))) (if jao-exwm--use-afio (jao-afio--goto-docs) (jao-exwm--goto-docs)) (if (not buffer) (jao-exwm-run (if page-no (format "zathura -P %s %s" page-no file-name) (format "zathura %s" file-name))) (pop-to-buffer buffer) - (jao-doc-view--enable-imenu file-name #'jao-zathura-goto-page) - (jao-zathura-goto-page page-no)))) + (when page-no (jao-zathura-goto-page page-no))) + (current-buffer))) + + (defun jao-exwm--zathura-setup () + (when (and (string= exwm-class-name "Zathura") + (not jao-doc-view--imenu-file)) + (let ((info (jao-zathura--file-info (current-buffer)))) + (jao-doc-view--enable-imenu (car info) #'jao-zathura-goto-page)))) + + (add-hook 'exwm-update-title-hook #'jao-exwm--zathura-setup t) (defun jao-exwm-pdf-zathura-close-all () (interactive) @@ -364,11 +373,22 @@ (defun jao-exwm-pdf-disable-zathura () (interactive) + (define-key org-mode-map (kbd "C-c o") #'jao-org-org-goto-pdf) (remove-hook 'kill-emacs-query-functions #'jao-exwm-pdf-zathura-close-all) (setq jao-org-open-pdf-fun #'jao-afio-open-pdf) (setq jao-org-links-pdf-store-fun nil) (setq jao-open-doc-fun #'jao-find-or-open)) + (defun jao-exwm-zathura-goto-pdf () + (interactive) + (if jao-browse-doc-use-emacs-p + (jao-org-org-goto-pdf) + (when-let (pdf (jao-org-org-to-pdf-file)) + (jao-zathura-open-doc pdf)))) + + (with-eval-after-load "org" + (define-key org-mode-map (kbd "C-c o") #'jao-exwm-zathura-goto-pdf)) + (when (not jao-browse-doc-use-emacs-p) (jao-exwm-pdf-enable-zathura)) @@ -377,7 +397,7 @@ #+begin_src emacs-lisp (major-mode-hydra-define+ (doc-view-mode pdf-view-mode) nil ("External" - (("z" (jao-zathura-open-doc (buffer-file-name)) "open with zathura") + (("z" (jao-zathura-open-doc) "open with zathura") ("m" jao-exwm-open-with-mupdf "open with mupdf")))) (defhydra jao-hydra-float (:color blue) @@ -463,8 +483,8 @@ (define-key exwm-mode-map [?\s-m] #'jao-hydra-media/body) (define-key exwm-mode-map [?\s-s] #'jao-hydra-spotify/body) (define-key exwm-mode-map [?\s-w] #'jao-hydra-exwm/body) - (define-key exwm-mode-map [?\s-p] #'jao-exwm-pdf-goto-org) - (define-key exwm-mode-map [?\s-P] #'jao-exwm-pdf-goto-org*) + (define-key exwm-mode-map (kbd "C-c o") #'jao-exwm-pdf-goto-org) + (define-key exwm-mode-map (kbd "C-c O") #'jao-exwm-pdf-goto-org*) (setq exwm-input-global-keys diff --git a/init.org b/init.org index e944232..8172ef9 100644 --- a/init.org +++ b/init.org @@ -3866,7 +3866,6 @@ (global-set-key "\M-\\" #'hippie-expand) (global-set-key "\C-c." #'goto-last-change) (global-set-key "\C-cj" #'join-line) - (global-set-key "\C-co" #'ff-find-other-file) (global-set-key "\C-cq" #'auto-fill-mode) (global-set-key "\C-xr\M-w" #'kill-rectangle-save) (global-set-key "\C-c\C-z" #'comment-or-uncomment-region) diff --git a/lib/doc/jao-doc-view.el b/lib/doc/jao-doc-view.el index cdc4502..f917b96 100644 --- a/lib/doc/jao-doc-view.el +++ b/lib/doc/jao-doc-view.el @@ -103,8 +103,9 @@ (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 (or file-name (buffer-file-name))))) + (let* ((outline nil) + (fn (or file-name (buffer-file-name) jao-doc-view--imenu-file)) + (fn (shell-quote-argument (expand-file-name fn)))) (with-temp-buffer (insert (shell-command-to-string (format "mutool show %s outline" fn))) (goto-char (point-min)) @@ -143,7 +144,7 @@ (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--imenu-file (or file-name jao-doc-view--imenu-file) jao-doc-view--goer (or goto-page 'jao-doc-view-goto-page)) (imenu-add-to-menubar "PDF outline")) diff --git a/org.org b/org.org index c103545..cddd898 100644 --- a/org.org +++ b/org.org @@ -293,7 +293,6 @@ (define-key org-mode-map [(f7)] 'org-archive-to-archive-sibling) (define-key org-mode-map "\C-cE" 'jao-insert-eww-link) (define-key org-mode-map "\C-c'" 'org-edit-src-code) - (define-key org-mode-map (kbd "C-c o") #'jao-org-org-goto-pdf) (define-key org-mode-map "\C-cO" 'outline-hide-other) (global-set-key "\C-cr" 'org-capture) (global-set-key "\C-c\C-l" 'org-store-link) -- cgit v1.2.3