summaryrefslogtreecommitdiff
path: root/modules/pdf-config.el
blob: 5cd3ea7153a85a596b435638bd6a47794f699124 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
;;; pdf-config --- PDF Viewer Setup -*- lexical-binding: t; coding: utf-8; -*-
;; author Craig Jennings <c@cjennings.net>

;;; Commentary:

;;; Code:

;; --------------------------------- PDF Tools ---------------------------------

(use-package pdf-tools
  :defer t
  :mode (("\\.pdf\\'" . pdf-view-mode))
  :hook
  (pdf-view-mode . pdf-view-midnight-minor-mode)
  :custom
  (pdf-view-display-size 'fit-page)
  (pdf-view-resize-factor 1.1)
  (pdf-view-midnight-colors '("#F1D5AC" . "#0F0E06")) ;; fg . bg
  ;; Avoid searching for unicodes to speed up pdf-tools.
  ;; ... and yes, 'ligther' is not a typo
  (pdf-view-use-unicode-ligther nil)
  ;; Enable HiDPI support, at the cost of memory.
  (pdf-view-use-scaling t)
  :config
  (pdf-tools-install :no-query)) ;; automatically compile on first launch

;; Keybindings via eval-after-load on 'pdf-view (not 'pdf-tools), because
;; opening a PDF loads pdf-view.el which provides 'pdf-view — it never
;; loads pdf-tools.el, so use-package :config for pdf-tools won't run.
(with-eval-after-load 'pdf-view
  (define-key pdf-view-mode-map "M" #'pdf-view-midnight-minor-mode)
  (define-key pdf-view-mode-map "m" #'bookmark-set)
  (define-key pdf-view-mode-map (kbd "C-=") #'pdf-view-enlarge)
  (define-key pdf-view-mode-map (kbd "C--") #'pdf-view-shrink)
  (define-key pdf-view-mode-map (kbd "C-c l") #'org-store-link)
  (define-key pdf-view-mode-map "z" (lambda () (interactive) (cj/open-file-with-command "zathura")))
  ;; Arrow keys / j,k: scroll within page only (no page change)
  (define-key pdf-view-mode-map "j" #'image-next-line)
  (define-key pdf-view-mode-map "k" #'image-previous-line)
  (define-key pdf-view-mode-map (kbd "<down>") #'image-next-line)
  (define-key pdf-view-mode-map (kbd "<up>") #'image-previous-line)
  ;; Page change: C-up/C-down go to top of prev/next page
  (define-key pdf-view-mode-map (kbd "C-<down>")
              (lambda () (interactive) (pdf-view-next-page-command) (image-bob)))
  (define-key pdf-view-mode-map (kbd "C-<up>")
              (lambda () (interactive) (pdf-view-previous-page-command) (image-eob))))

;; ------------------------------ PDF View Restore -----------------------------

;; restores the last known position on opening a pdf file.
(use-package pdf-view-restore
  :after pdf-tools
  :defer 1
  :hook
  (pdf-view-mode . pdf-view-restore-mode)
  :config
  (setq pdf-view-restore-filename (concat user-emacs-directory "/.pdf-view-restore")))

;; --------------------------- PDF Continuous Scroll ---------------------------

;; Note: This appears to behave badly in conjunction with org-noter
;; provides continuous scrolling of PDF documents in PDF View
;; (use-package pdf-continuous-scroll-mode
;;   :ensure nil ;; in custom folder
;;   :after pdf-tools
;;   :load-path "custom/pdf-continuous-scroll-mode-latest.el"
;;   :hook (pdf-view-mode . pdf-continuous-scroll-mode))

(provide 'pdf-config)
;;; pdf-config.el ends here.