emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Link type for pdf-tools annotations
@ 2024-02-08 22:13 Juan Manuel Macías
  2024-02-08 23:25 ` Ihor Radchenko
  2024-02-09 12:13 ` Irfan S
  0 siblings, 2 replies; 5+ messages in thread
From: Juan Manuel Macías @ 2024-02-08 22:13 UTC (permalink / raw)
  To: orgmode

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



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-02-12 15:23 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-08 22:13 Link type for pdf-tools annotations Juan Manuel Macías
2024-02-08 23:25 ` 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

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).