diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index 5e36eb63b..6cd1f667e 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -811,12 +811,38 @@ compelling reason, so..." :commands org-pdftools-export :init (after! org - (org-link-set-parameters "pdftools" + (add-hook 'org-store-link-functions #'org-pdftools-store-link) + + ;; HACK `org-pdftools' hard-codes "pdftools:" for its links. We want to use + ;; a generic link so that the backend doesn't matter. These hacks are + ;; in place so that the old pdf(view|tools) links still work, but that + ;; org-pdftools will only generate pdf: links. + (org-link-set-parameters "pdf" :follow #'org-pdftools-open :complete #'org-pdftools-complete-link :store #'org-pdftools-store-link :export #'org-pdftools-export) - (add-hook 'org-store-link-functions #'org-pdftools-store-link))) + + (add-hook! 'org-open-link-functions + (defun +org-open-old-pdf-links-fn (path) + (let ((regexp "^pdf\\(?:tools\\|view\\):")) + (when (string-match-p regexp) + (org-link-open (replace-regexp-in-string regexp "pdf:" link)) + t)))) + + ;; TODO Perhaps PR a variable for changing the link upstream? + (defadvice! +org--use-generic-link-a (link) + :filter-return '(org-pdftools-complete-link + org-pdftools-get-link) + (replace-regexp-in-string "^pdftools:" "pdf:" link)) + + (defadvice! +org--store-generic-link-a (orig-fn &rest args) + :around #'org-pdftools-store-link + (cl-letf* ((old-store-props (symbol-function #'org-link-store-props)) + ((symbol-function #'org-link-store-props) + (lambda (&rest plist) + (apply old-store-props (plist-put plist :type "pdf"))))) + (apply orig-fn args))))) (use-package! evil-org