From: "Juan Manuel Macías" <maciaschain@posteo.net>
To: orgmode <emacs-orgmode@gnu.org>
Subject: Link type for pdf-tools annotations
Date: Thu, 08 Feb 2024 22:13:50 +0000 [thread overview]
Message-ID: <87h6iitxi9.fsf@posteo.net> (raw)
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
next reply other threads:[~2024-02-08 22:14 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-08 22:13 Juan Manuel Macías [this message]
2024-02-08 23:25 ` Link type for pdf-tools annotations Ihor Radchenko
2024-02-09 0:40 ` Juan Manuel Macías
2024-02-09 12:13 ` Irfan S
2024-02-09 12:48 ` Juan Manuel Macías
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87h6iitxi9.fsf@posteo.net \
--to=maciaschain@posteo.net \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).