emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Fixing refile cache use for org-goto in indirect buffers.


From: Max Nikulin
Subject: Re: [PATCH] Fixing refile cache use for org-goto in indirect buffers.
Date: Mon, 19 Sep 2022 22:48:34 +0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0

On 19/09/2022 12:16, Yuchen Pei wrote:
To reprod:
- make sure the org-refile-targets generates a big enough list where
   the refile cache makes a difference
- visit an org file in org-refile-targets
- M-x clone-indirect-buffer-other-window
- C-0 C-c C-w to clear cache
- M-: (org-refile-get-targets)

Have you tried to execute this command in the indirect buffer?

- org-goto in the original buffer takes no effort
- but, org-goto in the indirect buffer takes time, which is unexpected.

diff --git a/lisp/org-refile.el b/lisp/org-refile.el
index 16cff25bd..7189ef595 100644
--- a/lisp/org-refile.el
+++ b/lisp/org-refile.el
@@ -306,7 +306,10 @@ converted to a headline before refiling."
        (dolist (f files)
          (with-current-buffer (if (bufferp f) f (org-get-agenda-file-buffer f))
            (or
-            (setq tgs (org-refile-cache-get (buffer-file-name) descre))
+            (setq tgs (org-refile-cache-get
+                        (buffer-file-name (when (bufferp f)
+                                            (buffer-base-buffer f)))
+                        descre))

Thank you for the attempt to improve handling of indirect buffers.

I am afraid, more serious refactoring is required to reuse result of `buffer-base-buffer', for the previous attempt to avoid issues with `buffer-file-name' see satotake to emacs-orgmode… [PATCH] org-refile.el: Fix the case of *scratch* buffer. Sat, 15 May 2021 19:38:39 +0900. https://list.orgmode.org/20210515103839.8574-2-doublequotation@gmail.com

There are several corner cases with `org-refile-cache', `org-goto', and buffers. - Perhaps buffer name, not file name should be used as the cache key if some buffer is not associated with any file. Alternatively cache should not be used at all. - When an indirect buffer is narrowed down to some region (e.g. created using `org-tree-to-indirect-buffer') jump targets should be filtered to the displayed range.

So the change is an improvement (I would prefer `and' instead of `when' in such expression, but it does not really matter). Leaving aside other issues and more serious refactoring, it seems, storing results to the cache requires a similar fix, so perhaps it is possible to move "(setq f ...)" code above of "(or ...)" and reuse f as the cache key.

Please, send patches produced by "git format-patch" command.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]