diff --git a/app/interleave/eaf-interleave.el b/app/interleave/eaf-interleave.el index 682d0ea..356fca7 100644 --- a/app/interleave/eaf-interleave.el +++ b/app/interleave/eaf-interleave.el @@ -287,7 +287,7 @@ based on a combination of `current-prefix-arg' and (enlarge-window-horizontally eaf-interleave-split-lines))) )) -(defun eaf-interleave--go-to-page-note (page) +(defun eaf-interleave--go-to-page-note (url page) "Look up the notes for the current pdf PAGE. Effectively resolves the headline with the interleave_page_note @@ -298,26 +298,23 @@ re-centered to the page heading. It (possibly) narrows the subtree when found." (with-current-buffer eaf-interleave-org-buffer - (let (point (window (get-buffer-window (current-buffer) 'visible))) - (save-excursion - (widen) - (goto-char (point-min)) - (when (re-search-forward (format "^\[ \t\r\]*\:interleave_page_note\: %d$" page) nil t) - ;; widen the buffer again for the case it is narrowed from - ;; multi-pdf notes search. Kinda ugly I know. Maybe a macro helps? - (widen) - (org-back-to-heading t) - (eaf-interleave--narrow-to-subtree) - (org-show-subtree) - (org-cycle-hide-drawers t) - (setq point (point)))) - ;; When narrowing is disabled, and the notes/org buffer is - ;; visible recenter to the current headline. So even if not - ;; narrowed the notes buffer scrolls allong with the PDF. - (when (and eaf-interleave-disable-narrowing point window) - (with-selected-window window - (goto-char point) - (recenter))) + (let ((window (get-buffer-window (current-buffer) 'visible)) + (property-list (org-map-entries (lambda () + (let ((url (org-entry-get-with-inheritance eaf-interleave--url-prop)) + (page (org-entry-get-with-inheritance eaf-interleave--page-note-prop))) + (cons url page))))) + point) + (catch 'find-property + (dolist (property property-list) + (when (and (string= (car property) url) + (string= (cdr property) (number-to-string page))) + (widen) + (org-back-to-heading t) + (eaf-interleave--narrow-to-subtree) + (org-show-subtree) + (org-cycle-hide-drawers t) + (setq point (point)) + (throw 'find-property nil)))) point))) (defun eaf-interleave--narrow-to-subtree (&optional force) @@ -424,7 +421,7 @@ Consider a headline with property PROPERTY as parent headline." (defun eaf-interleave--pdf-add-note () "EAF pdf-viewer-mode add note" (let* ((page (eaf-interleave--pdf-viewer-current-page eaf--buffer-url)) - (position (eaf-interleave--go-to-page-note page))) + (position (eaf-interleave--go-to-page-note eaf--buffer-url page))) (if position (eaf-interleave--switch-to-org-buffer t position) (eaf-interleave--create-new-note eaf--buffer-url eaf--buffer-app-name page)))