emacs-orgmode
[Top][All Lists]
Advanced

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

imenu vs. refile goto (was Re: [PATCH] lisp/org-compat.el: Allow using i


From: Samuel Wales
Subject: imenu vs. refile goto (was Re: [PATCH] lisp/org-compat.el: Allow using imenu to visit non-leaf headlines)
Date: Thu, 13 Jun 2024 23:10:48 -0700

how does imenu compare against completion systems like ido combined with org refile set to goto?  when would you use imenu vs. other completion?

On Wednesday, June 12, 2024, Morgan Smith <Morgan.J.Smith@outlook.com> wrote:
With a file like this:

* headline 1
** headline 2

We currently produce an imenu tree that looks like this:

'(("headline 1" ("headline 2" . marker-2)))

imenu has no clue where "headline 1" is located and thus the user
can't navigate to it.  With this patch installed imenu knows where
non-leaf headlines are as the tree will now look like this:

'(("headline 1" . marker-1)
  ("headline 1" ("headline 2" . marker-2)))

Quirks:

With the default `imenu-flatten' value of nil, it is still impossible
to visit non-leaf headlines and no change is perceived.

Setting `imenu-flatten' to 'group works as expected with the quirk
that top level headlines don't end up in the group.

Ex:
* Headline 1
Group is "*"
Setting the group to "Headline 1" somehow might be nice but would
require upstream changes in imenu.
** Headline 2
Group is "Headline 1"
*** Headline 3
Group is "Headline 1:Headline 2"

Everything seems to work as expected when `imenu-flatten' is set to
'prefix or 'annotation.

* lisp/org-compat.el (org-imenu-get-tree): Add the current headline to
the tree as a simple item even if it isn't a leaf.
---
 lisp/org-compat.el | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lisp/org-compat.el b/lisp/org-compat.el
index d6620f962..a1152186d 100644
--- a/lisp/org-compat.el
+++ b/lisp/org-compat.el
@@ -1447,8 +1447,8 @@ This also applied for speedbar access."
           (let* ((m (point-marker))
                  (item (propertize headline 'org-imenu-marker m 'org-imenu t)))
             (push m org-imenu-markers)
-            (if (>= level last-level)
-                (push (cons item m) (aref subs level))
+             (push (cons item m) (aref subs level))
+             (unless (>= level last-level)
               (push (cons item
                           (cl-mapcan #'identity (cl-subseq subs (1+ level))))
                     (aref subs level))
--
2.45.1




--
The Kafka Pandemic

A blog about science, health, human rights, and misopathy: https://thekafkapandemic.blogspot.com


reply via email to

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