From 4cf0b0433d8ea892d3a086360e318c1cd5781829 Mon Sep 17 00:00:00 2001 From: Ihor Radchenko Date: Thu, 17 Aug 2023 12:48:52 +0300 Subject: [PATCH] org-id-find-id-in-file: Prefer using temporary buffer * lisp/org-id.el (org-id-find-id-in-file): Use a temporary throwaway Org buffer to lookup IDs when we do not need to keep the buffer. This speeds up updating IDs. --- lisp/org-id.el | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lisp/org-id.el b/lisp/org-id.el index be8c0bd33..a2c452b44 100644 --- a/lisp/org-id.el +++ b/lisp/org-id.el @@ -675,16 +675,23 @@ optional argument MARKERP, return the position as a new marker." ((not (file-exists-p file)) nil) (t (let* ((visiting (find-buffer-visiting file)) - (buffer (or visiting (find-file-noselect file)))) + (buffer (or visiting + (if markerp (find-file-noselect file) + (get-buffer-create " *Org ID temp*" t))))) (unwind-protect (with-current-buffer buffer + (unless (derived-mode-p 'org-mode) (org-mode)) + (unless (or visiting markerp) + (buffer-disable-undo) + (insert-file-contents file nil nil nil 'replace)) (let ((pos (org-find-entry-with-id id))) (cond ((null pos) nil) (markerp (move-marker (make-marker) pos buffer)) (t (cons file pos))))) - ;; Remove opened buffer in the process. - (unless (or visiting markerp) (kill-buffer buffer))))))) + ;; Clean temporarily buffer if we don't need to keep it. + (unless (or visiting markerp) + (with-current-buffer buffer (erase-buffer)))))))) ;; id link type