[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Link type for pdf-tools annotations
From: |
Juan Manuel Macías |
Subject: |
Link type for pdf-tools annotations |
Date: |
Thu, 08 Feb 2024 22:13:50 +0000 |
Hi,
Many times I need to "save" an annotation point in the pdf-tools
annotations buffer. So I defined a new link type and the function to
store it. The link is stored with the structure:
[[pdf-annot:/path/to/file.pdf::annotation-date][file-name.pdf (annot. on p.
page-number)]]
The link opens the PDF and jumps to the specific annotation. A screenshot:
https://i.imgur.com/hw96NfD.png
I share the code here in case it is useful to someone:
#+begin_src emacs-lisp
(defun my-org-pdf-annot-store-link ()
(when (equal (format "%s" major-mode) "pdf-annot-list-mode")
(let* ((pdf-buf pdf-annot-list-document-buffer)
(pdf-file (buffer-file-name pdf-buf))
(annot (pdf-annot-getannot (tabulated-list-get-id) pdf-buf))
(date (pdf-annot-print-property annot 'modified))
(page (save-excursion
(beginning-of-line)
(re-search-forward "\\(^\s+\\)\\([[:digit:]]+\\)" nil t)
(match-string 2)))
(link (concat "pdf-annot:" pdf-file "::" date))
(desc (format "%s (annot. on p. %s)" (file-name-nondirectory
pdf-file) page)))
(org-link-store-props
:type "pdf-annot"
:link link
:description desc))))
(org-link-set-parameters
"pdf-annot"
:follow (lambda (path)
(let ((a (if (string-match "::\\(.+\\)" path)
(match-string 1 path)
(error "no annotation date")))
(file-path (replace-regexp-in-string "::.+" "" path)))
(find-file file-path)
(pdf-annot-list-annotations)
(let ((anot-buf (format "*%s's annots*"
(file-name-sans-extension
(buffer-name)))))
(with-current-buffer anot-buf
(save-excursion
(goto-char (point-min))
(re-search-forward a nil t)
(call-interactively
#'pdf-annot-list-display-annotation-from-id))))))
:store #'my-org-pdf-annot-store-link)
#+end_src
Best regards,
Juan Manuel
--
Juan Manuel Macías -- Composición tipográfica, tratamiento de datos, diseño
editorial y ortotipografía
- Link type for pdf-tools annotations,
Juan Manuel Macías <=