Skip to content
master
Switch branches/tags
Code

Latest commit

Also fixed regex for jumping around skeleton headings and speed up
isearch by narrowing to the current page when changing pages
a5b61bc

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
Aug 4, 2019
Jan 10, 2021
Jan 18, 2021

org-pdftools: a custom org link type for pdf-tools

This proj ect was inspired by and built upon org-pdfview from @markus1189.

Installation

You can now install org-pdftools and org-noter-pdftools from MELPA!

https://melpa.org/packages/org-pdftools-badge.svg

https://melpa.org/packages/org-noter-pdftools-badge.svg

Run M-x pdf-tools-install after installation of pdftools if you haven’t done before.

(use-package org-noter
  :config
  ;; Your org-noter config ........
  (require 'org-noter-pdftools))

(use-package org-pdftools
  :hook (org-mode . org-pdftools-setup-link))

(use-package org-noter-pdftools
  :after org-noter
  :config
  ;; Add a function to ensure precise note is inserted
  (defun org-noter-pdftools-insert-precise-note (&optional toggle-no-questions)
    (interactive "P")
    (org-noter--with-valid-session
     (let ((org-noter-insert-note-no-questions (if toggle-no-questions
                                                   (not org-noter-insert-note-no-questions)
                                                 org-noter-insert-note-no-questions))
           (org-pdftools-use-isearch-link t)
           (org-pdftools-use-freestyle-annot t))
       (org-noter-insert-note (org-noter--get-precise-info)))))

  ;; fix https://github.com/weirdNox/org-noter/pull/93/commits/f8349ae7575e599f375de1be6be2d0d5de4e6cbf
  (defun org-noter-set-start-location (&optional arg)
    "When opening a session with this document, go to the current location.
With a prefix ARG, remove start location."
    (interactive "P")
    (org-noter--with-valid-session
     (let ((inhibit-read-only t)
           (ast (org-noter--parse-root))
           (location (org-noter--doc-approx-location (when (called-interactively-p 'any) 'interactive))))
       (with-current-buffer (org-noter--session-notes-buffer session)
         (org-with-wide-buffer
          (goto-char (org-element-property :begin ast))
          (if arg
              (org-entry-delete nil org-noter-property-note-location)
            (org-entry-put nil org-noter-property-note-location
                           (org-noter--pretty-print-location location))))))))
  (with-eval-after-load 'pdf-annot
    (add-hook 'pdf-annot-activate-handler-functions #'org-noter-pdftools-jump-to-note)))

Latest release note

Current features

The provided function includes:

  • [X] (Sort-of) backward compatibility with org-pdfview: simply change the link prefix from pdfview: to pdftools:.
  • [X] The reason this URL prefix change was proposed is that pdftools: links can also point to pdf-occur searchs. Multi-file search is also supported.
  • [X] There is also support for pdf-isearch.
  • [X] Beyond the original link implementation that stores only file path and page number, now you can store the precise location of annotations.
  • [X] If there are selected texts on the current PDF page, it will be marked-up using pdf-tools markup functions (by default, underline) automatically and the corresponding annotation id is stored in the link.
  • HTML exported link now have a “#page=n” postfix, which should make browsers like Chrome open the corresponding page.
  • You can now customize the link description format using org-pdftools-get-desc-function
  • Added org-noter-pdftools-embed-org-note-to-pdf, org-noter-pdftools-embed-all-org-note-to-pdf to copy one or all org-noter annotation headings (the ones with a annot-id and org-pdftools link) to the corresponding PDF file.
  • Added org-noter-pdftools-embed-org-buffer-to-pdf to copy the whole org-noter buffer to a annotation in the left upper corner of the first page in the PDF.
  • Added org-noter-pdftools-jump-to-note config in the README.
  • The prefix of pdftools link can now be customized using org-pdftools-link-prefix, and the default is now set to “pdf”
  • The org-pdftools-search-string-separator is now set to ?? to avoid org fontification problem
  • You can now specify how the path of pdf is stored using two function:
  • org-pdftools-path-generator takes buffer-file-name as an argument, and output a translated path. Default to abbreviate-file-name
  • org-pdftools-path-resolver takes a translated path as an argument and translate it back to absolute path. Default to expand-file-name

Integration with org-noter

You can use the vanilla org-noter now.

  • [X] Integrate with org-noter, such that org-noter can remember the precise location (in the resolution of the exact annotation).
  • [X] Jump from a PDF annotation to a associated org-heading org-noter-sync-* and org-noter-jump-to-heading.
  • [X] Transform old org-noter notes to newer ones and sync with the corresponding PDF. org-noter-convert-old-notes
  • [-] PDF annotation will have full and synced information with the associated org-note. (Besides the note content, each annotate will record the IDs of the corresponding org heading and potentially even it’s parent org heading, such that tree-rebuild is possible.)

Planed features

This is the first step of a set of overhauls of Emacs PDF notetaking experience. The features below are planned (either in this package or as PR to other packages):

  • [-] Optionally grab image/text excerpt from the PDF and insert below the corresponding org-heading. Please refer to pdf-view-extract-region-image, not sure what’s the best way to integrate it.
  • [ ] Link export with image/text-based excerpt from the PDF.
  • [ ] (Long-term) Org <-> PDF Annotation converter.

About

A custom org link type for pdf-tools

Topics

Resources

License

Releases

No releases published

Packages

No packages published