Once I started tweaking pdf-tools I couldn’t resist a few more bits of streamlining my workflow. I wanted to be able to commit an annotation by hitting RET
rather than C-c C-c
and then use SHIFT
and RET
to actually enter a newline, a bit like in many messaging apps. The problem was that the necessary commands are in pdf-annot-edit-contents-minor-mode-map
which is a key map that is not available until that minor mode is loaded. This causes an error if you try to define a key in that map in the same way as I did for the keys to add annotations. This is remedied by wrapping the definitions in with-eval-after-load
which waits to execute the code until the file that defines the pdf-annot
mode is loaded.
The other thing I wanted to do was have the pdf file auto-save every time I commit an annotation. I did this by advising the function pdf-annot-edit-contents-commit
to run save-buffer
afterwards. This also had to be inside with-eval-after-load
as the pdf-annot-edit-contents-commit
function is not available to be advised until the file defining the pdf-annot
mode is loaded. The only other issue I had was that when the advice to pdf-annot-edit-contents-commit
called save-buffer
, it passed its argument (the text of the annotation) to save-buffer
which then failed. I hacked around this by writing a simple wrapper to save buffer that ignores any arguments. There is probably a better way to do this!
Putting it all together with my previous tweaks, my pdf-tools
config looks like this:
;; wrapper for save-buffer ignoring arguments (defun bjm/save-buffer-no-args () "Save buffer ignoring arguments" (save-buffer)) (use-package pdf-tools :pin manual ;;manually update :config ;; initialise (pdf-tools-install) (setq-default pdf-view-display-size 'fit-page) ;; automatically annotate highlights (setq pdf-annot-activate-created-annotations t) ;; use isearch instead of swiper (define-key pdf-view-mode-map (kbd "C-s") 'isearch-forward) ;; turn off cua so copy works (add-hook 'pdf-view-mode-hook (lambda () (cua-mode 0))) ;; more fine-grained zooming (setq pdf-view-resize-factor 1.1) ;; keyboard shortcuts (define-key pdf-view-mode-map (kbd "h") 'pdf-annot-add-highlight-markup-annotation) (define-key pdf-view-mode-map (kbd "t") 'pdf-annot-add-text-annotation) (define-key pdf-view-mode-map (kbd "D") 'pdf-annot-delete) ;; wait until map is available (with-eval-after-load "pdf-annot" (define-key pdf-annot-edit-contents-minor-mode-map (kbd "<return>") 'pdf-annot-edit-contents-commit) (define-key pdf-annot-edit-contents-minor-mode-map (kbd "<S-return>") 'newline) ;; save after adding comment (advice-add 'pdf-annot-edit-contents-commit :after 'bjm/save-buffer-no-args)))