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

* Re: Link type for pdf-tools annotations
  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
  1 sibling, 1 reply; 5+ messages in thread
From: Ihor Radchenko @ 2024-02-08 23:25 UTC (permalink / raw)
  To: Juan Manuel Macías; +Cc: orgmode

Juan Manuel Macías <maciaschain@posteo.net> writes:

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

You may also utilize `org-create-file-search-functions' and
`org-execute-file-search-functions' to make an ordinary file: links
works for the same purpose.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


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

* Re: Link type for pdf-tools annotations
  2024-02-08 23:25 ` Ihor Radchenko
@ 2024-02-09  0:40   ` Juan Manuel Macías
  0 siblings, 0 replies; 5+ messages in thread
From: Juan Manuel Macías @ 2024-02-09  0:40 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: orgmode

Ihor Radchenko writes:

> Juan Manuel Macías <maciaschain@posteo.net> writes:
>
>> 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.
>
> You may also utilize `org-create-file-search-functions' and
> `org-execute-file-search-functions' to make an ordinary file: links
> works for the same purpose.

Thanks for the pointers. Note that in this use case I don't need to
search in the PDF file itself but in the pdf-annot-list-mode buffer that
is created via pdf-annot-list-annotations. This buffer is synchronized
with the PDF to which it is linked. What this link type does is visit
the pdf file (with pdf-tools), create the list of annotations and jump
to the specific annotation, by date.
pdf-annot-list-display-annotation-from-id highlights the specific list
annotation in the linked PDF (if necessary, moves to the corresponding
page), and opens the content of the annotation in another window
(interactively the function is executed by pressing SPC on the
annotation list at point). Storing the annotation date seemed like the
safest option to me, since the annotation id can change when adding new
annotations, each time the list is created. The typical scenario: when I
am consulting a PDF annotated by someone and I want to store the
location of some specific annotations. As there can be many annotations
per page, adding a simple bookmark to the page would not be enough
either.

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

* Re: Link type for pdf-tools annotations
  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 12:13 ` Irfan S
  2024-02-09 12:48   ` Juan Manuel Macías
  1 sibling, 1 reply; 5+ messages in thread
From: Irfan S @ 2024-02-09 12:13 UTC (permalink / raw)
  To: Juan Manuel Macías; +Cc: orgmode

Juan Manuel Macías <maciaschain@posteo.net> writes:


> 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:

FYI, there is also [[https://github.com/fuxialexander/org-pdftools][org-pdftools]] which provides similar (and additional) functionality, and is on MELPA. Thanks for sharing your code.

Irfan


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

* Re: Link type for pdf-tools annotations
  2024-02-09 12:13 ` Irfan S
@ 2024-02-09 12:48   ` Juan Manuel Macías
  0 siblings, 0 replies; 5+ messages in thread
From: Juan Manuel Macías @ 2024-02-09 12:48 UTC (permalink / raw)
  To: Irfan S; +Cc: orgmode

Irfan S writes:

> FYI, there is also
> [[https://github.com/fuxialexander/org-pdftools][org-pdftools]] which
> provides similar (and additional) functionality, and is on MELPA.
> Thanks for sharing your code.

Thank you very much, I didn't know that.

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