diff --git a/layers/+tools/pdf-tools/README.org b/layers/+tools/pdf-tools/README.org index 66212a3cc..fd2f91158 100644 --- a/layers/+tools/pdf-tools/README.org +++ b/layers/+tools/pdf-tools/README.org @@ -1,6 +1,7 @@ #+TITLE: pdf-tools layer #+HTML_HEAD_EXTRA: +[[file:img/pdf.png]] * Table of Contents :TOC_4_org:noexport: - [[Description][Description]] @@ -8,7 +9,7 @@ - [[Prerequisites][Prerequisites]] - [[Dotfile][Dotfile]] - [[Usage][Usage]] - - [[Known Issues ][Known Issues ]] + - [[Known Issues][Known Issues]] - [[Key bindings][Key bindings]] - [[PDF View][PDF View]] - [[Leader keys][Leader keys]] @@ -17,12 +18,15 @@ - [[Occur mode][Occur mode]] * Description - This layer enables support for the [[https://github.com/politza/pdf-tools][=pdf-tools=]] package. - -According to the official repository, "PDF Tools is, among other things, a -replacement of DocView for PDF files. The key difference is, that pages are not -pre-rendered by e.g. ghostscript and stored in the file-system, but rather -created on-demand and stored in memory." +This layer enables support for the [[https://github.com/politza/pdf-tools][=pdf-tools=]] package. + +According to the official repository: + +#+begin_quote +"PDF Tools is, among other things, a replacement of DocView for PDF files. The +key difference is, that pages are not pre-rendered by e.g. ghostscript and +stored in the file-system, but rather created on-demand and stored in memory." +#+end_quote Examples of features that =pdf-tools= provides: - Use =occur= in the pdf file; @@ -42,7 +46,6 @@ If you use a Debian based system such as Ubuntu, you can skip this step, as =pdf-tools= installation asks whether you want it to try to download automatically all dependencies using ~apt-get~. - ** Dotfile After installing the dependencies, add this to your =~/.spacemacs=. @@ -65,16 +68,15 @@ If the compilation does not run successfully, you should confirm whether all dependencies are properly installed and run the command ~pdf-tools-install~. * Usage -Use ~M-SPC~ or ~s-M-SPC~ to activate the pdf-tools transient state. +Use ~SPC m .~ to activate the pdf-tools transient state. The keybindings that the transient displays can be also accessed using ~SPC m~. The navigation keybindings can be used directly. - Try out opening the outline (~O~). The outline window shows the structure of the pdf, displaying all headings. You can set annotations by selecting regions and right clicking on the buffer. -Additionally, all annotation related functions are can be accessed with ~SPC m a~. +Additionally, all annotation related functions can be accessed with ~SPC m a~. Searching with =occur= can be done by using =pdf-occur= (~SPC m s s~). @@ -83,11 +85,9 @@ Tips: ~SPC m s b~) This command trims the blank parts of the lateral margins, making the useful portion larger. - The last visited page is not saved across Emacs sessions. If you want save it, - use the bookmarks commands =bookmark-set= (~C-x r m~) and =bookmark-jump= - (~SPC j b~) to save and go to a bookmark, respectively. + use the bookmarks commands on ~SPC j b~ to save and go to a bookmark. - -* Known Issues +* Known Issues Due to =image-mode='s behaviour, the =pdf-tools= buffer might go back to the first page after switching windows. If this happens, you can quickly go back to the previous page in history with =pdf-history-backward= (~``~ in Evil state and @@ -139,33 +139,33 @@ differently from the default Evil search. To go to the next match, use ~C-s~. |-----------------------+-------------------------------------------| | *Slicing* | | |-----------------------+-------------------------------------------| -| ~sm~ | Set slice using mouse | -| ~sb~ | Set slice from bounding box | -| ~sr~ | Reset slice | +| ~SPC m s m~ | Set slice using mouse | +| ~SPC m s b~ | Set slice from bounding box | +| ~SPC m s r~ | Reset slice | |-----------------------+-------------------------------------------| | *Annotations* | | |-----------------------+-------------------------------------------| -| ~aD~ | Delete annotation (select it with mouse) | -| ~aa~ | List all attachments in a dired buffer | -| ~ah~ | Highlight visual selection | -| ~al~ | List all annotations | -| ~am~ | Add markup annotation to visual selection | -| ~ao~ | Strikeout visual selection | -| ~as~ | Add squiggly to visual selection | -| ~at~ | Add annotation text | -| ~au~ | Underline to visual selection | +| ~SPC m a D~ | Delete annotation (select it with mouse) | +| ~SPC m a a~ | List all attachments in a dired buffer | +| ~SPC m a h~ | Highlight visual selection | +| ~SPC m a l~ | List all annotations | +| ~SPC m a m~ | Add markup annotation to visual selection | +| ~SPC m a o~ | Strikeout visual selection | +| ~SPC m a s~ | Add squiggly to visual selection | +| ~SPC m a t~ | Add annotation text | +| ~SPC m a u~ | Underline to visual selection | |-----------------------+-------------------------------------------| | *Fit image to window* | | |-----------------------+-------------------------------------------| -| ~fw~ | Fit width to window | -| ~fh~ | Fit height to window | -| ~fp~ | Fit page to window | +| ~SPC m f w~ | Fit width to window | +| ~SPC m f h~ | Fit height to window | +| ~SPC m f p~ | Fit page to window | |-----------------------+-------------------------------------------| | *Other* | | |-----------------------+-------------------------------------------| -| ~n~ | Toggle night view mode | -| ~s~ | Run =pdf-occur= | -| ~p~ | Display print version | +| ~SPC m n~ | Toggle night view mode | +| ~SPC m s~ | Run =pdf-occur= | +| ~SPC m p~ | Display print version | ** Outline buffer mode diff --git a/layers/+tools/pdf-tools/img/pdf.png b/layers/+tools/pdf-tools/img/pdf.png new file mode 100644 index 000000000..38e3c4bbf Binary files /dev/null and b/layers/+tools/pdf-tools/img/pdf.png differ diff --git a/layers/+tools/pdf-tools/packages.el b/layers/+tools/pdf-tools/packages.el index b77f7210c..3f1d94a5e 100644 --- a/layers/+tools/pdf-tools/packages.el +++ b/layers/+tools/pdf-tools/packages.el @@ -10,10 +10,7 @@ ;; ;;; License: GPLv3 -(setq pdf-tools-packages - '( - pdf-tools - )) +(setq pdf-tools-packages '(pdf-tools)) (defun pdf-tools/init-pdf-tools () (use-package pdf-tools @@ -22,6 +19,87 @@ :config (progn (pdf-tools-install) + + (spacemacs|define-transient-state pdf-tools + :title "PDF-tools transient state" + :on-enter (setq which-key-inhibit t) + :on-exit (setq which-key-inhibit nil) + :doc + " + Navigation^^^^ Scale/Fit^^ Annotations^^ Actions^^ Other^^ + ----------^^^^--------------- ---------^^------------------ -----------^^------ -------^^---------- -----^^--- + [_j_/_k_] scroll down/up [_W_] fit to width [_al_] list [_s_] search [_q_] quit + [_h_/_l_] scroll left/right [_H_] fit to height [_at_] text [_O_] outline + [_d_/_u_] pg down/up [_P_] fit to page [_aD_] delete [_p_] print + [_J_/_K_] next/prev pg [_m_] slice using mouse [_am_] markup [_o_] open link + ^^^^ [_b_] slice from bounding box ^^ [_r_] revert + ^^^^ [_R_] reset slice ^^ [_t_] attachments + ^^^^ ^^ ^^ [_n_] night mode + " + :bindings + ;; Navigation + ("j" pdf-view-next-line-or-next-page) + ("k" pdf-view-previous-line-or-previous-page) + ("l" image-forward-hscroll) + ("h" image-backward-hscroll) + ("J" pdf-view-next-page) + ("K" pdf-view-previous-page) + ("u" pdf-view-scroll-down-or-previous-page) + ("d" pdf-view-scroll-up-or-next-page) + ;; Scale/Fit + ("W" pdf-view-fit-width-to-window) + ("H" pdf-view-fit-height-to-window) + ("P" pdf-view-fit-page-to-window) + ("m" pdf-view-set-slice-using-mouse) + ("b" pdf-view-set-slice-from-bounding-box) + ("R" pdf-view-reset-slice) + ;; Annotations + ("aD" pdf-annot-delete) + ("at" pdf-annot-attachment-dired :exit t) + ("al" pdf-annot-list-annotations :exit t) + ("am" pdf-annot-add-markup-annotation) + ;; Actions + ("s" pdf-occur :exit t) + ("O" pdf-outline :exit t) + ("p" pdf-misc-print-document :exit t) + ("o" pdf-links-action-perform :exit t) + ("r" pdf-view-revert-buffer) + ("t" pdf-annot-attachment-dired :exit t) + ("n" pdf-view-midnight-minor-mode) + ;; Other + ("q" nil :exit t)) + + (spacemacs/declare-prefix-for-mode 'pdf-view-mode "ma" "annotations") + (spacemacs/declare-prefix-for-mode 'pdf-view-mode "mf" "fit") + (spacemacs/declare-prefix-for-mode 'pdf-view-mode "ms" "slice/search") + (spacemacs/set-leader-keys-for-major-mode 'pdf-view-mode + "." 'spacemacs/pdf-tools-transient-state/body + ;; Slicing image + "sm" 'pdf-view-set-slice-using-mouse + "sb" 'pdf-view-set-slice-from-bounding-box + "sr" 'pdf-view-reset-slice + ;; Annotations + "aD" 'pdf-annot-delete + "at" 'pdf-annot-attachment-dired + "ah" 'pdf-annot-add-highlight-markup-annotation + "al" 'pdf-annot-list-annotations + "am" 'pdf-annot-add-markup-annotation + "ao" 'pdf-annot-add-strikeout-markup-annotation + "as" 'pdf-annot-add-squiggly-markup-annotation + "at" 'pdf-annot-add-text-annotation + "au" 'pdf-annot-add-underline-markup-annotation + ;; Fit image to window + "fw" 'pdf-view-fit-width-to-window + "fh" 'pdf-view-fit-height-to-window + "fp" 'pdf-view-fit-page-to-window + ;; Other + "ss" 'pdf-occur + "p" 'pdf-misc-print-document + "O" 'pdf-outline + "n" 'pdf-view-midnight-minor-mode) + + (evil-define-key 'visual pdf-view-mode-map "y" 'pdf-view-kill-ring-save) + ;; TODO: Make `/', `?' and `n' work like in Evil (evilified-state-evilify pdf-view-mode pdf-view-mode-map ;; Navigation @@ -46,44 +124,7 @@ ;; Actions "r" 'pdf-view-revert-buffer "o" 'pdf-links-action-perform - "O" 'pdf-outline - ) - - (evil-define-key 'visual pdf-view-mode-map - "y" 'pdf-view-kill-ring-save - ) - - (spacemacs/declare-prefix-for-mode 'pdf-view-mode "ma" "annotations") - (spacemacs/declare-prefix-for-mode 'pdf-view-mode "mf" "fit") - (spacemacs/declare-prefix-for-mode 'pdf-view-mode "ms" "slice/search") - - (spacemacs/set-leader-keys-for-major-mode 'pdf-view-mode - ;; Slicing image - "sm" 'pdf-view-set-slice-using-mouse - "sb" 'pdf-view-set-slice-from-bounding-box - "sr" 'pdf-view-reset-slice - ;; Annotations - "aD" 'pdf-annot-delete - "at" 'pdf-annot-attachment-dired - "ah" 'pdf-annot-add-highlight-markup-annotation - "al" 'pdf-annot-list-annotations - "am" 'pdf-annot-add-markup-annotation - "ao" 'pdf-annot-add-strikeout-markup-annotation - "as" 'pdf-annot-add-squiggly-markup-annotation - "at" 'pdf-annot-add-text-annotation - "au" 'pdf-annot-add-underline-markup-annotation - ;; Fit image to window - "fw" 'pdf-view-fit-width-to-window - "fh" 'pdf-view-fit-height-to-window - "fp" 'pdf-view-fit-page-to-window - ;; Other - "ss" 'pdf-occur - "p" 'pdf-misc-print-document - "O" 'pdf-outline - "n" 'pdf-view-midnight-minor-mode - ) - - + "O" 'pdf-outline) (evilified-state-evilify pdf-outline-buffer-mode pdf-outline-buffer-mode-map "-" 'negative-argument "j" 'next-line @@ -104,78 +145,16 @@ "''" 'pdf-outline-move-to-current-page "Q" 'pdf-outline-quit-and-kill "q" 'quit-window - "F" 'pdf-outline-follow-mode - ) - + "F" 'pdf-outline-follow-mode) (evilified-state-evilify pdf-annot-list-mode pdf-annot-list-mode-map "f" 'pdf-annot-list-display-annotation-from-id "d" 'tablist-flag-forward "x" 'tablist-do-flagged-delete "u" 'tablist-unmark-forward - "q" 'tablist-quit - ) - + "q" 'tablist-quit) (evilified-state-evilify pdf-occur-buffer-mode pdf-occur-buffer-mode-map "q" 'tablist-quit "g" 'pdf-occur-revert-buffer-with-args "r" 'pdf-occur-revert-buffer-with-args "*" 'spacemacs/enter-ahs-forward - "?" 'evil-search-backward - ))) - - (spacemacs|define-transient-state pdf-tools - :title "PDF-tools transient state" - :on-enter (setq which-key-inhibit t) - :on-exit (setq which-key-inhibit nil) - :doc - " -Navigation^^^^ Scale/Fit^^ Annotations^^ Actions^^ Other^^ -----------^^^^--------------- ---------^^------------------ -----------^^------ -------^^---------- -----^^--- -[_j_/_k_] scroll down/up [_W_] fit to width [_al_] list [_s_] search [_q_] quit -[_h_/_l_] scroll left/right [_H_] fit to height [_at_] text [_O_] outline -[_d_/_u_] pg down/up [_P_] fit to page [_aD_] delete [_p_] print -[_J_/_K_] next/prev pg [_m_] slice using mouse [_am_] markup [_o_] open link -^^^^ [_b_] slice from bounding box ^^ [_r_] revert -^^^^ [_R_] reset slice ^^ [_t_] attachments -^^^^ ^^ ^^ [_n_] night mode -" - :bindings - ;; Navigation - ("j" pdf-view-next-line-or-next-page) - ("k" pdf-view-previous-line-or-previous-page) - ("l" image-forward-hscroll) - ("h" image-backward-hscroll) - ("J" pdf-view-next-page) - ("K" pdf-view-previous-page) - ("u" pdf-view-scroll-down-or-previous-page) - ("d" pdf-view-scroll-up-or-next-page) - ;; Scale/Fit - ("W" pdf-view-fit-width-to-window) - ("H" pdf-view-fit-height-to-window) - ("P" pdf-view-fit-page-to-window) - ("m" pdf-view-set-slice-using-mouse) - ("b" pdf-view-set-slice-from-bounding-box) - ("R" pdf-view-reset-slice) - ;; Annotations - ("aD" pdf-annot-delete) - ("at" pdf-annot-attachment-dired :exit t) - ("al" pdf-annot-list-annotations :exit t) - ("am" pdf-annot-add-markup-annotation) - ;; Actions - ("s" pdf-occur :exit t) - ("O" pdf-outline :exit t) - ("p" pdf-misc-print-document :exit t) - ("o" pdf-links-action-perform :exit t) - ("r" pdf-view-revert-buffer) - ("t" pdf-annot-attachment-dired :exit t) - ("n" pdf-view-midnight-minor-mode) - ;; Other - ("q" nil :exit t)) - -;; pdf-view-mode-map is not recognized unless wrapped in with-eval-after-load -(with-eval-after-load "pdf-view" - (define-key pdf-view-mode-map (kbd "M-SPC") - - 'spacemacs/pdf-tools-transient-state/body) - (define-key pdf-view-mode-map (kbd "s-M-SPC") - 'spacemacs/pdf-tools-transient-state/body))) + "?" 'evil-search-backward))))