From 1832ca950d97093436088bba97f6256d414c344a Mon Sep 17 00:00:00 2001 From: jao Date: Mon, 5 Apr 2021 03:14:50 +0100 Subject: add to doc-view the bits we need: outline and imenu --- lib/doc/jao-org-links.el | 86 +++++++++++++++++------------------------------- 1 file changed, 31 insertions(+), 55 deletions(-) (limited to 'lib/doc/jao-org-links.el') diff --git a/lib/doc/jao-org-links.el b/lib/doc/jao-org-links.el index 2defa7c..5848698 100644 --- a/lib/doc/jao-org-links.el +++ b/lib/doc/jao-org-links.el @@ -1,30 +1,25 @@ ;; -*- lexical-binding: t; -*- +(require 'pdf-tools nil t) + (require 'jao-org-notes) +(require 'jao-doc-view) (require 'jao-maildir) -(require 'pdf-info) -(defvar jao-org--sink-dir "./") -(defvar jao-org-open-pdf-fun 'jao-org--pdf-tools-open) +(declare pdf-info-outline "pdf-info") -(defun jao-org--pdf-go (page height) - (when page (pdf-view-goto-page page)) - (when height - (image-set-window-vscroll - (round (/ (* height (cdr (pdf-view-image-size))) (frame-char-height)))))) +(defvar jao-org--sink-dir "./") +(defvar jao-org-open-pdf-fun #'jao-org--pdf-tools-open) (defun jao-org--pdf-tools-open (path page &optional height) (org-open-file path 1) - (jao-org--pdf-go path page)) + (jao-doc-view-goto-page page height)) (defun jao-org--pdf-open (path page &optional height) - (funcall (or jao-org-open-pdf-fun 'jao-org--pdf-tools-open) path page height)) - -(defun jao-org--pdf-p (file) (string-match-p ".*\\.pdf$" file)) + (funcall (or jao-org-open-pdf-fun #'jao-org--pdf-tools-open) path page height)) (defun jao-org-links--open-pdf (link) "Open LINK in pdf-view-mode." - (require 'pdf-tools) (cond ((string-match "\\(.*\\)::\\([0-9]*\\)\\+\\+\\([[0-9]\\.*[0-9]*\\)" link) (let* ((path (match-string 1 link)) (page (string-to-number (match-string 2 link))) @@ -45,7 +40,7 @@ (read-file-name "Import file: " jao-org--sink-dir link link)))) (shell-command (format "mv %s %s" real-file dest-path)))) - (if (jao-org--pdf-p dest-path) + (if (jao-doc-view-is-pdf dest-path) (jao-org-links--open-pdf full-link) (browse-url (format "file://%s" (expand-file-name dest-path)))))) @@ -53,33 +48,10 @@ (let ((default-directory jao-org--sink-dir)) (let ((f (replace-regexp-in-string "^file:" "doc:" (org-file-complete-link arg)))) - (if (jao-org--pdf-p f) + (if (jao-doc-view-is-pdf f) (concat f "::" (read-from-minibuffer "Page: " "1")) f)))) -(defsubst jao-org--title->file (title) - (concat (mapconcat 'downcase (split-string title nil t) "-") ".pdf")) - -(defun jao-org--pdf-title (&optional fname) - (let ((base (file-name-base (or fname (pdf-view-buffer-file-name))))) - (capitalize (replace-regexp-in-string "-" " " base)))) - -(defvar-local jao--pdf-outline nil) - -(defun jao-org--pdf-section-title (&optional page) - (when (not jao--pdf-outline) - (setq-local jao--pdf-outline (pdf-info-outline))) - (let ((page (or page (pdf-view-current-page))) - (outline jao--pdf-outline) - (cur-page 0) - (cur-title (jao-org--pdf-title))) - (while (and (car outline) (< cur-page page)) - (setq cur-page (cdr (assoc 'page (car outline)))) - (when (<= cur-page page) - (setq cur-title (cdr (assoc 'title (car outline))))) - (setq outline (cdr outline))) - (replace-regexp-in-string "[[:blank:]]+" " " cur-title))) - (defun jao-org-links-open-mail (fname) (let ((group (jao-maildir-file-to-group fname)) (id (with-temp-buffer @@ -96,10 +68,10 @@ (defun jao-org-links--store-pdf-link () (or (when (fboundp jao-org-links-pdf-store-fun) (funcall jao-org-links-pdf-store-fun)) - (when (derived-mode-p 'pdf-view-mode) + (when (derived-mode-p 'pdf-view-mode 'doc-view-mode) (jao-org-links-store-pdf-link buffer-file-name - (pdf-view-current-page) - (jao-org--pdf-section-title))))) + (jao-doc-view-current-page) + (jao-doc-view-section-title))))) ;;;###autoload (defun jao-org-links-store-pdf-link (path page title) @@ -111,17 +83,7 @@ ;;;###autoload (defun jao-org-insert-doc (title) (interactive "sDocument title: ") - (insert (format "[[doc:%s][%s]]" (jao-org--title->file title) title))) - -;;;###autoload -(defun jao-org-links-setup (sink-dir) - (interactive) - (org-link-set-parameters "doc" - :follow #'jao-org-links--follow-doc - :complete #'jao-org-links--complete-doc - :store #'jao-org-links--store-pdf-link) - (org-link-set-parameters "message" :follow #'jao-org-links-open-mail) - (setq jao-org--sink-dir (file-name-as-directory sink-dir))) + (insert (format "[[doc:%s][%s]]" (jao-doc-view-title->file title) title))) ;;;###autoload (defun jao-org-org-to-pdf-file () @@ -143,7 +105,7 @@ ;;;###autoload (defun jao-org-insert-doc-skeleton (&optional title) - (insert "#+title: " (or title (jao-org--pdf-title (buffer-file-name))) + (insert "#+title: " (or title (jao-doc-view-title (buffer-file-name))) "\n#+author:\n#+filetags: ") (jao-org-notes-insert-tags) (insert "\n#+startup: latexpreview\n\n")) @@ -151,16 +113,19 @@ ;;;###autoload (defun jao-org-pdf-goto-org (arg) (interactive "P") - (when (jao-org--pdf-p buffer-file-name) + (when (jao-doc-view-is-pdf buffer-file-name) (let* ((file (jao-org-pdf-to-org-file)) (new (not (file-exists-p file))) - (title (jao-org--pdf-title))) + (title (jao-doc-view-title))) (when (or arg new) (org-store-link nil t)) (find-file-other-window file) (when new (jao-org-insert-doc-skeleton title) (org-insert-link))))) +;;;###autoload +(defun jao-org-pdf-goto-org* () (interactive) (jao-org-pdf-goto-org t)) + ;;;###autoload (defun jao-org-org-goto-pdf () (interactive) @@ -168,4 +133,15 @@ (find-file-other-window f) (user-error "No PDF file associated with this buffer"))) +;;;###autoload +(defun jao-org-links-setup (sink-dir) + (interactive) + (org-link-set-parameters "doc" + :follow #'jao-org-links--follow-doc + :complete #'jao-org-links--complete-doc + :store #'jao-org-links--store-pdf-link) + (org-link-set-parameters "docview" :store #'ignore) + (org-link-set-parameters "message" :follow #'jao-org-links-open-mail) + (setq jao-org--sink-dir (file-name-as-directory sink-dir))) + (provide 'jao-org-links) -- cgit v1.2.3