branch: externals/org
commit 4cf0b0433d8ea892d3a086360e318c1cd5781829
Author: Ihor Radchenko <yanta...@posteo.net>
Commit: Ihor Radchenko <yanta...@posteo.net>

    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 be8c0bd33e..a2c452b440 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
 

Reply via email to