all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* Listing headings in dedicated buffer with imenu.
@ 2024-07-29  8:48 Heime
  2024-07-29  9:33 ` Stephen Berman
  0 siblings, 1 reply; 15+ messages in thread
From: Heime @ 2024-07-29  8:48 UTC (permalink / raw)
  To: Heime via Users list for the GNU Emacs text editor

I wish to list headings in a dedicated buffer with imenu.  
The listing should be in the order in which headings occur 
in the buffer.

Have done the following, but the buffer ends up empty.

(defun vodil-imenu-bfh ()
  "Insert imenu headings in order in a dedicated buffer."
  (interactive)

  (let ((imenu-items (imenu--make-index-alist t))
        (buffer-name "*Imenu Headings*"))
    (with-current-buffer (get-buffer-create buffer-name)
      (erase-buffer)
      (dolist (item imenu-items)
        (let ((name (car item))
              (position (cdr item)))
          (when (and (stringp name) (number-or-marker-p position))
            (insert (format "%s\n" name)))))
      (goto-char (point-min)))
    (pop-to-buffer buffer-name)))







^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-29  8:48 Listing headings in dedicated buffer with imenu Heime
@ 2024-07-29  9:33 ` Stephen Berman
  2024-07-29 10:26   ` Heime
  0 siblings, 1 reply; 15+ messages in thread
From: Stephen Berman @ 2024-07-29  9:33 UTC (permalink / raw)
  To: Heime; +Cc: Heime via Users list for the GNU Emacs text editor

On Mon, 29 Jul 2024 08:48:38 +0000 Heime <heimeborgia@protonmail.com> wrote:

> I wish to list headings in a dedicated buffer with imenu.
> The listing should be in the order in which headings occur
> in the buffer.
>
> Have done the following, but the buffer ends up empty.
>
> (defun vodil-imenu-bfh ()
>   "Insert imenu headings in order in a dedicated buffer."
>   (interactive)
>
>   (let ((imenu-items (imenu--make-index-alist t))
>         (buffer-name "*Imenu Headings*"))
>     (with-current-buffer (get-buffer-create buffer-name)
>       (erase-buffer)
>       (dolist (item imenu-items)
>         (let ((name (car item))
>               (position (cdr item)))
>           (when (and (stringp name) (number-or-marker-p position))
>             (insert (format "%s\n" name)))))
>       (goto-char (point-min)))
>     (pop-to-buffer buffer-name)))

It works for me, as long as imenu.el is loaded.

Steve Berman



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-29  9:33 ` Stephen Berman
@ 2024-07-29 10:26   ` Heime
  2024-07-29 10:32     ` Heime
  2024-07-29 10:32     ` Stephen Berman
  0 siblings, 2 replies; 15+ messages in thread
From: Heime @ 2024-07-29 10:26 UTC (permalink / raw)
  To: Stephen Berman; +Cc: Heime via Users list for the GNU Emacs text editor






Sent with Proton Mail secure email.

On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman <stephen.berman@gmx.net> wrote:

> On Mon, 29 Jul 2024 08:48:38 +0000 Heime heimeborgia@protonmail.com wrote:
> 
> > I wish to list headings in a dedicated buffer with imenu.
> > The listing should be in the order in which headings occur
> > in the buffer.
> > 
> > Have done the following, but the buffer ends up empty.
> > 
> > (defun vodil-imenu-bfh ()
> > "Insert imenu headings in order in a dedicated buffer."
> > (interactive)
> > 
> > (let ((imenu-items (imenu--make-index-alist t))
> > (buffer-name "Imenu Headings"))
> > (with-current-buffer (get-buffer-create buffer-name)
> > (erase-buffer)
> > (dolist (item imenu-items)
> > (let ((name (car item))
> > (position (cdr item)))
> > (when (and (stringp name) (number-or-marker-p position))
> > (insert (format "%s\n" name)))))
> > (goto-char (point-min)))
> > (pop-to-buffer buffer-name)))
> 
> 
> It works for me, as long as imenu.el is loaded.
> 
> Steve Berman

What would I need to load it ?



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-29 10:26   ` Heime
@ 2024-07-29 10:32     ` Heime
  2024-07-29 10:32     ` Stephen Berman
  1 sibling, 0 replies; 15+ messages in thread
From: Heime @ 2024-07-29 10:32 UTC (permalink / raw)
  To: Heime; +Cc: Stephen Berman,
	Heime via Users list for the GNU Emacs text editor






Sent with Proton Mail secure email.

On Monday, July 29th, 2024 at 10:26 PM, Heime <heimeborgia@protonmail.com> wrote:

> 
> 
> 
> 
> 
> Sent with Proton Mail secure email.
> 
> 
> On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman stephen.berman@gmx.net wrote:
> 
> > On Mon, 29 Jul 2024 08:48:38 +0000 Heime heimeborgia@protonmail.com wrote:
> > 
> > > I wish to list headings in a dedicated buffer with imenu.
> > > The listing should be in the order in which headings occur
> > > in the buffer.
> > > 
> > > Have done the following, but the buffer ends up empty.
> > > 
> > > (defun vodil-imenu-bfh ()
> > > "Insert imenu headings in order in a dedicated buffer."
> > > (interactive)
> > > 
> > > (let ((imenu-items (imenu--make-index-alist t))
> > > (buffer-name "Imenu Headings"))
> > > (with-current-buffer (get-buffer-create buffer-name)
> > > (erase-buffer)
> > > (dolist (item imenu-items)
> > > (let ((name (car item))
> > > (position (cdr item)))
> > > (when (and (stringp name) (number-or-marker-p position))
> > > (insert (format "%s\n" name)))))
> > > (goto-char (point-min)))
> > > (pop-to-buffer buffer-name)))
> > 
> > It works for me, as long as imenu.el is loaded.
> > 
> > Steve Berman
> 
> 
> What would I need to load it ?

I did put (require 'imenu)

But in the buffer I only get rescan



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-29 10:26   ` Heime
  2024-07-29 10:32     ` Heime
@ 2024-07-29 10:32     ` Stephen Berman
  2024-07-29 10:41       ` Heime
  2024-07-29 11:43       ` Sharon Kimble
  1 sibling, 2 replies; 15+ messages in thread
From: Stephen Berman @ 2024-07-29 10:32 UTC (permalink / raw)
  To: Heime; +Cc: Heime via Users list for the GNU Emacs text editor

On Mon, 29 Jul 2024 10:26:22 +0000 Heime <heimeborgia@protonmail.com> wrote:

> Sent with Proton Mail secure email.
>
> On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman <stephen.berman@gmx.net> wrote:
>
>> On Mon, 29 Jul 2024 08:48:38 +0000 Heime heimeborgia@protonmail.com wrote:
>>
>> > I wish to list headings in a dedicated buffer with imenu.
>> > The listing should be in the order in which headings occur
>> > in the buffer.
>> >
>> > Have done the following, but the buffer ends up empty.
>> >
>> > (defun vodil-imenu-bfh ()
>> > "Insert imenu headings in order in a dedicated buffer."
>> > (interactive)
>> >
>> > (let ((imenu-items (imenu--make-index-alist t))
>> > (buffer-name "Imenu Headings"))
>> > (with-current-buffer (get-buffer-create buffer-name)
>> > (erase-buffer)
>> > (dolist (item imenu-items)
>> > (let ((name (car item))
>> > (position (cdr item)))
>> > (when (and (stringp name) (number-or-marker-p position))
>> > (insert (format "%s\n" name)))))
>> > (goto-char (point-min)))
>> > (pop-to-buffer buffer-name)))
>>
>>
>> It works for me, as long as imenu.el is loaded.
>>
>> Steve Berman
>
> What would I need to load it ?

One way is this:

(defun vodil-imenu-bfh ()
  "Insert imenu headings in order in a dedicated buffer."
  (interactive)
  (eval-when-compile
    (require 'imenu))
  (let ((imenu-items (imenu--make-index-alist t))
        (buffer-name "*Imenu Headings*"))
    (with-current-buffer (get-buffer-create buffer-name)
      (erase-buffer)
      (dolist (item imenu-items)
        (let ((name (car item))
              (position (cdr item)))
          (when (and (stringp name) (number-or-marker-p position))
            (insert (format "%s\n" name)))))
      (goto-char (point-min)))
    (pop-to-buffer buffer-name)))

Steve Berman



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-29 10:32     ` Stephen Berman
@ 2024-07-29 10:41       ` Heime
  2024-07-29 10:51         ` Stephen Berman
  2024-07-29 11:43       ` Sharon Kimble
  1 sibling, 1 reply; 15+ messages in thread
From: Heime @ 2024-07-29 10:41 UTC (permalink / raw)
  To: Stephen Berman; +Cc: Heime via Users list for the GNU Emacs text editor






Sent with Proton Mail secure email.

On Monday, July 29th, 2024 at 10:32 PM, Stephen Berman <stephen.berman@gmx.net> wrote:

> On Mon, 29 Jul 2024 10:26:22 +0000 Heime heimeborgia@protonmail.com wrote:
> 
> > Sent with Proton Mail secure email.
> > 
> > On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman stephen.berman@gmx.net wrote:
> > 
> > > On Mon, 29 Jul 2024 08:48:38 +0000 Heime heimeborgia@protonmail.com wrote:
> > > 
> > > > I wish to list headings in a dedicated buffer with imenu.
> > > > The listing should be in the order in which headings occur
> > > > in the buffer.
> > > > 
> > > > Have done the following, but the buffer ends up empty.
> > > > 
> > > > (defun vodil-imenu-bfh ()
> > > > "Insert imenu headings in order in a dedicated buffer."
> > > > (interactive)
> > > > 
> > > > (let ((imenu-items (imenu--make-index-alist t))
> > > > (buffer-name "Imenu Headings"))
> > > > (with-current-buffer (get-buffer-create buffer-name)
> > > > (erase-buffer)
> > > > (dolist (item imenu-items)
> > > > (let ((name (car item))
> > > > (position (cdr item)))
> > > > (when (and (stringp name) (number-or-marker-p position))
> > > > (insert (format "%s\n" name)))))
> > > > (goto-char (point-min)))
> > > > (pop-to-buffer buffer-name)))
> > > 
> > > It works for me, as long as imenu.el is loaded.
> > > 
> > > Steve Berman
> > 
> > What would I need to load it ?
> 
> 
> One way is this:
> 
> (defun vodil-imenu-bfh ()
> "Insert imenu headings in order in a dedicated buffer."
> (interactive)
> (eval-when-compile
> (require 'imenu))
> (let ((imenu-items (imenu--make-index-alist t))
> (buffer-name "Imenu Headings"))
> (with-current-buffer (get-buffer-create buffer-name)
> (erase-buffer)
> (dolist (item imenu-items)
> (let ((name (car item))
> (position (cdr item)))
> (when (and (stringp name) (number-or-marker-p position))
> (insert (format "%s\n" name)))))
> (goto-char (point-min)))
> (pop-to-buffer buffer-name)))
> 
> Steve Berman

Right.  I have this function that I run.  Running vodil-imenu-bfh
after executing vodil-imenu-expr gives me rescan in the buffer.

(defun vodil-imenu-expr ()
  "Set up `imenu` to show a list of functions in the current buffer."

  (interactive)

  (setq imenu-generic-expression
    '( ("headings" "^;;;\\s-+\\([HM][[:digit:]]\\)\\s-+\\(.*\\)" 2)))

  (imenu-add-to-menubar "Iml")
  (imenu--make-index-alist t)
  (call-interactively 'imenu))




^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-29 10:41       ` Heime
@ 2024-07-29 10:51         ` Stephen Berman
  2024-07-29 11:29           ` Heime
  0 siblings, 1 reply; 15+ messages in thread
From: Stephen Berman @ 2024-07-29 10:51 UTC (permalink / raw)
  To: Heime; +Cc: Heime via Users list for the GNU Emacs text editor

On Mon, 29 Jul 2024 10:41:08 +0000 Heime <heimeborgia@protonmail.com> wrote:

> Sent with Proton Mail secure email.
>
> On Monday, July 29th, 2024 at 10:32 PM, Stephen Berman
> <stephen.berman@gmx.net> wrote:
>
>> On Mon, 29 Jul 2024 10:26:22 +0000 Heime heimeborgia@protonmail.com wrote:
>>
>> > Sent with Proton Mail secure email.
>> >
>> > On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman
>> > stephen.berman@gmx.net wrote:
>> >
>> > > On Mon, 29 Jul 2024 08:48:38 +0000 Heime heimeborgia@protonmail.com wrote:
>> > >
>> > > > I wish to list headings in a dedicated buffer with imenu.
>> > > > The listing should be in the order in which headings occur
>> > > > in the buffer.
>> > > >
>> > > > Have done the following, but the buffer ends up empty.
>> > > >
>> > > > (defun vodil-imenu-bfh ()
>> > > > "Insert imenu headings in order in a dedicated buffer."
>> > > > (interactive)
>> > > >
>> > > > (let ((imenu-items (imenu--make-index-alist t))
>> > > > (buffer-name "Imenu Headings"))
>> > > > (with-current-buffer (get-buffer-create buffer-name)
>> > > > (erase-buffer)
>> > > > (dolist (item imenu-items)
>> > > > (let ((name (car item))
>> > > > (position (cdr item)))
>> > > > (when (and (stringp name) (number-or-marker-p position))
>> > > > (insert (format "%s\n" name)))))
>> > > > (goto-char (point-min)))
>> > > > (pop-to-buffer buffer-name)))
>> > >
>> > > It works for me, as long as imenu.el is loaded.
>> > >
>> > > Steve Berman
>> >
>> > What would I need to load it ?
>>
>>
>> One way is this:
>>
>> (defun vodil-imenu-bfh ()
>> "Insert imenu headings in order in a dedicated buffer."
>> (interactive)
>> (eval-when-compile
>> (require 'imenu))
>> (let ((imenu-items (imenu--make-index-alist t))
>> (buffer-name "Imenu Headings"))
>> (with-current-buffer (get-buffer-create buffer-name)
>> (erase-buffer)
>> (dolist (item imenu-items)
>> (let ((name (car item))
>> (position (cdr item)))
>> (when (and (stringp name) (number-or-marker-p position))
>> (insert (format "%s\n" name)))))
>> (goto-char (point-min)))
>> (pop-to-buffer buffer-name)))
>>
>> Steve Berman
>
> Right.  I have this function that I run.  Running vodil-imenu-bfh
> after executing vodil-imenu-expr gives me rescan in the buffer.
>
> (defun vodil-imenu-expr ()
>   "Set up `imenu` to show a list of functions in the current buffer."
>
>   (interactive)
>
>   (setq imenu-generic-expression
>     '( ("headings" "^;;;\\s-+\\([HM][[:digit:]]\\)\\s-+\\(.*\\)" 2)))
>
>   (imenu-add-to-menubar "Iml")
>   (imenu--make-index-alist t)
>   (call-interactively 'imenu))

What were the contents of the current buffer when you executed
vodil-imenu-expr?

Steve Berman



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-29 10:51         ` Stephen Berman
@ 2024-07-29 11:29           ` Heime
  2024-07-29 11:45             ` Stephen Berman
  0 siblings, 1 reply; 15+ messages in thread
From: Heime @ 2024-07-29 11:29 UTC (permalink / raw)
  To: Stephen Berman; +Cc: Heime via Users list for the GNU Emacs text editor






Sent with Proton Mail secure email.

On Monday, July 29th, 2024 at 10:51 PM, Stephen Berman <stephen.berman@gmx.net> wrote:

> On Mon, 29 Jul 2024 10:41:08 +0000 Heime heimeborgia@protonmail.com wrote:
> 
> > Sent with Proton Mail secure email.
> > 
> > On Monday, July 29th, 2024 at 10:32 PM, Stephen Berman
> > stephen.berman@gmx.net wrote:
> > 
> > > On Mon, 29 Jul 2024 10:26:22 +0000 Heime heimeborgia@protonmail.com wrote:
> > > 
> > > > Sent with Proton Mail secure email.
> > > > 
> > > > On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman
> > > > stephen.berman@gmx.net wrote:
> > > > 
> > > > > On Mon, 29 Jul 2024 08:48:38 +0000 Heime heimeborgia@protonmail.com wrote:
> > > > > 
> > > > > > I wish to list headings in a dedicated buffer with imenu.
> > > > > > The listing should be in the order in which headings occur
> > > > > > in the buffer.
> > > > > > 
> > > > > > Have done the following, but the buffer ends up empty.
> > > > > > 
> > > > > > (defun vodil-imenu-bfh ()
> > > > > > "Insert imenu headings in order in a dedicated buffer."
> > > > > > (interactive)
> > > > > > 
> > > > > > (let ((imenu-items (imenu--make-index-alist t))
> > > > > > (buffer-name "Imenu Headings"))
> > > > > > (with-current-buffer (get-buffer-create buffer-name)
> > > > > > (erase-buffer)
> > > > > > (dolist (item imenu-items)
> > > > > > (let ((name (car item))
> > > > > > (position (cdr item)))
> > > > > > (when (and (stringp name) (number-or-marker-p position))
> > > > > > (insert (format "%s\n" name)))))
> > > > > > (goto-char (point-min)))
> > > > > > (pop-to-buffer buffer-name)))
> > > > > 
> > > > > It works for me, as long as imenu.el is loaded.
> > > > > 
> > > > > Steve Berman
> > > > 
> > > > What would I need to load it ?
> > > 
> > > One way is this:
> > > 
> > > (defun vodil-imenu-bfh ()
> > > "Insert imenu headings in order in a dedicated buffer."
> > > (interactive)
> > > (eval-when-compile
> > > (require 'imenu))
> > > (let ((imenu-items (imenu--make-index-alist t))
> > > (buffer-name "Imenu Headings"))
> > > (with-current-buffer (get-buffer-create buffer-name)
> > > (erase-buffer)
> > > (dolist (item imenu-items)
> > > (let ((name (car item))
> > > (position (cdr item)))
> > > (when (and (stringp name) (number-or-marker-p position))
> > > (insert (format "%s\n" name)))))
> > > (goto-char (point-min)))
> > > (pop-to-buffer buffer-name)))
> > > 
> > > Steve Berman
> > 
> > Right. I have this function that I run. Running vodil-imenu-bfh
> > after executing vodil-imenu-expr gives me rescan in the buffer.
> > 
> > (defun vodil-imenu-expr ()
> > "Set up `imenu` to show a list of functions in the current buffer."
> > 
> > (interactive)
> > 
> > (setq imenu-generic-expression
> > '( ("headings" "^;;;\\s-+\\([HM][[:digit:]]\\)\\s-+\\(.*\\)" 2)))
> > 
> > (imenu-add-to-menubar "Iml")
> > (imenu--make-index-alist t)
> > (call-interactively 'imenu))
> 
> 
> What were the contents of the current buffer when you executed
> vodil-imenu-expr?
> 
> Steve Berman

I had an elisp file.  I ran "M-x vodil-imenu-expr" when in the file to get
the correct imenu entries.  But executing "M-x vodil-imenu-bfh" after that
I end up with the buffer "Imenu Headings" having only *rescan* in it.




^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-29 10:32     ` Stephen Berman
  2024-07-29 10:41       ` Heime
@ 2024-07-29 11:43       ` Sharon Kimble
  1 sibling, 0 replies; 15+ messages in thread
From: Sharon Kimble @ 2024-07-29 11:43 UTC (permalink / raw)
  To: Stephen Berman; +Cc: Heime, Heime via Users list for the GNU Emacs text editor

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Stephen Berman <stephen.berman@gmx.net> writes:

> On Mon, 29 Jul 2024 10:26:22 +0000 Heime <heimeborgia@protonmail.com> wrote:
>
>> Sent with Proton Mail secure email.
>>
>> On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman <stephen.berman@gmx.net> wrote:
>>
>>> On Mon, 29 Jul 2024 08:48:38 +0000 Heime heimeborgia@protonmail.com wrote:
>>>
>>> > I wish to list headings in a dedicated buffer with imenu.
>>> > The listing should be in the order in which headings occur
>>> > in the buffer.
>>> >
>>> > Have done the following, but the buffer ends up empty.
>>> >
>>> > (defun vodil-imenu-bfh ()
>>> > "Insert imenu headings in order in a dedicated buffer."
>>> > (interactive)
>>> >
>>> > (let ((imenu-items (imenu--make-index-alist t))
>>> > (buffer-name "Imenu Headings"))
>>> > (with-current-buffer (get-buffer-create buffer-name)
>>> > (erase-buffer)
>>> > (dolist (item imenu-items)
>>> > (let ((name (car item))
>>> > (position (cdr item)))
>>> > (when (and (stringp name) (number-or-marker-p position))
>>> > (insert (format "%s\n" name)))))
>>> > (goto-char (point-min)))
>>> > (pop-to-buffer buffer-name)))
>>>
>>>
>>> It works for me, as long as imenu.el is loaded.
>>>
>>> Steve Berman
>>
>> What would I need to load it ?
>
> One way is this:
>
> (defun vodil-imenu-bfh ()
>   "Insert imenu headings in order in a dedicated buffer."
>   (interactive)
>   (eval-when-compile
>     (require 'imenu))
>   (let ((imenu-items (imenu--make-index-alist t))
>         (buffer-name "*Imenu Headings*"))
>     (with-current-buffer (get-buffer-create buffer-name)
>       (erase-buffer)
>       (dolist (item imenu-items)
>         (let ((name (car item))
>               (position (cdr item)))
>           (when (and (stringp name) (number-or-marker-p position))
>             (insert (format "%s\n" name)))))
>       (goto-char (point-min)))
>     (pop-to-buffer buffer-name)))
>
> Steve Berman

This is what I've been suing for years now, I hope it helps you?

===
** Imenu
 *** imenu
#+BEGIN_SRC emacs-lisp
(require 'imenu)

(setq imenu-auto-rescan t
      imenu-auto-rescan-maxout (* 1024 1024 10)
      imenu-max-item-length 80
      imenu-max-items 25
      imenu-use-markers t
      imenu-sort-function nil
      imenu-use-popup-menu 'on-mouse
      imenup-sort-ignores-case-flag t
      imenu-list-auto-resize t
      imenu-list-position 'left
      imenu-list-size 0.1)
#+END_SRC
[2020-09-12 Sat 10:07]

#+BEGIN_SRC emacs-lisp
(set-default 'imenu-auto-rescan t)
#+END_SRC
[2020-09-14 Mon 11:17]

#+BEGIN_SRC emacs-lisp
;; setting up 'imenu'
(local-set-key "\C-x\C-a" 'outline-show-all)
(add-hook 'org-mode-hook
(lambda () (imenu-add-to-menubar "Imenu")))
(setq org-imenu-depth 4)

;;(add-hook 'rst-mode-hook
;;(lambda () (imenu-add-to-menubar "Imenu")))
;;(setq adoc-imenu-depth 2)

;;(add-hook 'markdown-mode-hook
;;(lambda () (imenu-add-to-menubar "Imenu")))
;;(setq adoc-imenu-depth 2)

;; (add-hook 'LaTeX-mode-hook
;; (lambda () (imenu-add-to-menubar "Imenu")))
;; (setq latex-imenu-depth 2)

;; (add-hook 'projectile-mode-hook
;; (lambda () (imenu-add-to-menubar "Imenu")))
;; (setq org-imenu-depth 0)
#+END_SRC
[2015-04-08 Wed 23:54]
[2017-01-17 Tue 11:04]
[2021-01-19 Tue 04:05]

*** imenu+

#+BEGIN_SRC emacs-lisp
(require 'imenu+)
(global-set-key (kbd "C-x 2") 'imenu-add-to-menubar)
#+END_SRC
[2020-09-13 Sun 15:14]
http://www.howardism.org/Technical/Emacs/imenu.html

*** imenu-3

#+BEGIN_SRC emacs-lisp
;; Jump to a definition in the current file. (This is awesome.)
(global-set-key (kbd "M-i") 'prelude-ido-goto-symbol)
(require 'imenu)
(set-default 'imenu-auto-rescan t)
(defun prelude-ido-goto-symbol (&optional symbol-list)
  "Refresh imenu and jump to a place in the buffer using Ido."
   (interactive)
   (unless (featurep 'imenu)
     (require 'imenu nil t))
  (cond
    ((not symbol-list)
     (let ((ido-mode ido-mode)
           (ido-enable-flex-matching
            (if (boundp 'ido-enable-flex-matching)
                ido-enable-flex-matching t))
           name-and-pos symbol-names position)
       (unless ido-mode
         (ido-mode 1)
         (setq ido-enable-flex-matching t))
       (while (progn
                (imenu--cleanup)
               (setq imenu--index-alist nil)
                (prelude-ido-goto-symbol (imenu--make-index-alist))
                (setq selected-symbol
                      (ido-completing-read "Symbol " symbol-names))
                (string= (car imenu--rescan-item) selected-symbol)))
       (unless (and (boundp 'mark-active) mark-active)
         (push-mark nil t nil))
       (setq position (cdr (assoc selected-symbol name-and-pos)))
       (cond
        ((overlayp position)
          (goto-char (overlay-start position)))
        (t
         (goto-char position)))))
    ((listp symbol-list)
     (dolist (symbol symbol-list)
       (let (name position)
         (cond
          ((and (listp symbol) (imenu--subalist-p symbol))
           (prelude-ido-goto-symbol symbol))
          ((listp symbol)
           (setq name (car symbol))
           (setq position (cdr symbol)))
          ((stringp symbol)
           (setq name symbol)
           (setq position
                 (get-text-property 1 'org-imenu-marker symbol))))
        (unless (or (null position) (null name)
                    (string= (car imenu--rescan-item) name))
          (add-to-list 'symbol-names name)
          (add-to-list 'name-and-pos (cons name position))))))))
#+END_SRC
[2014-11-16 Sun 16:09]
[2017-01-16 Mon 23:49]
https://www.emacswiki.org/emacs/ImenuMode

*** imenu-list
#+BEGIN_SRC emacs-lisp
(require 'imenu-list)
(setq imenu-list-size 0.1)

;;(global-set-key (kbd "M-g 1") #'imenu-list-smart-toggle)
(global-set-key (kbd "C-c C-`") #'imenu-list-smart-toggle)
(setq imenu-list-focus-after-activation t)
(setq imenu-list-auto-resize t)
(setq imenu-list-position 'left)
(setq imenu-list-after-jump-hook nil)
#+END_SRC    
===

Thanks  
  Sharon.
- -- 
A taste of linux = http://www.sharons.org.uk
TGmeds = http://www.tgmeds.org.uk
DrugFacts = https://www.drugfacts.org.uk
Debian 12.6, Fluxbox 1.3.7, emacs 30.0.50, org 9.7.8 
-----BEGIN PGP SIGNATURE-----

iQJRBAEBCgA7FiEELSc/6QwVBIYugJDbNoGAGQr4g1sFAmangHMdHGJvdWRpY2Nh
c0Bza2ltYmxlMDkucGx1cy5jb20ACgkQNoGAGQr4g1tdoA//RQnIMxX9N0tiW1fn
EOxe0yKZC8T8ei/8K1fH/bYbkLIBhJTwopV7XLK8vVuCHm8io6fsD6bkNt2+Vrvq
vTmCilSt/as6i9xJO16LA2Ptl42MUyo9W9v8dQHVvOR9I/LnfG2Vq3DB0KS+RcFc
Vgyl8GDv1i4gqlOwKscKKsexwGZ2sejuy2H/GtlPa9QN8FPbSyW8XCptZVO1CnsG
be3d1yteMCzRKF0LRewb5MWKvxqTicr3+uMsT7W8FylKfIjrmmur37k6kZVhE+rZ
IYqR2zt8cU6MLoVMe0vB7pg+kG4FMe1+R0eL5lVglQ9LUX8DyZKgDhNUeNuUd4dd
rZU5vNtin84HUrMkuI+nhgOuhwPxQOQOwpIGXFeslXMA7eeom1/yMlgXbaGoKtVH
IHeASSIOUn5r+IwX6MOam5j4oQOC+lqUedeTK898oDYp2VzqL5SXBXaNzikXc3Uc
X0bKoTIGt7QbrLIK0ncs4i35tr3Zdr4Ig8xqs5i0Ry3WLwwlT8CJV4/BYp2l+F2O
XpOXBcrjTnfixcsS+OtcqfXBTb/jxRxoJfAlzI7DxX5UwFI7Yk36lfeXhry0OfE8
1KK31FQulLw9pafTROs5hvTifou0X0aC6l+qT8GVugGK2Fa3BQdOzEjQ5srZc5wx
OyYPdacnHKwUxAOXKPktcDQQUX4=
=hDTk
-----END PGP SIGNATURE-----



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-29 11:29           ` Heime
@ 2024-07-29 11:45             ` Stephen Berman
  2024-07-29 11:53               ` Heime
  0 siblings, 1 reply; 15+ messages in thread
From: Stephen Berman @ 2024-07-29 11:45 UTC (permalink / raw)
  To: Heime; +Cc: Heime via Users list for the GNU Emacs text editor

On Mon, 29 Jul 2024 11:29:07 +0000 Heime <heimeborgia@protonmail.com> wrote:

> Sent with Proton Mail secure email.
>
> On Monday, July 29th, 2024 at 10:51 PM, Stephen Berman
> <stephen.berman@gmx.net> wrote:
>
>> On Mon, 29 Jul 2024 10:41:08 +0000 Heime heimeborgia@protonmail.com wrote:
>>
>> > Sent with Proton Mail secure email.
>> >
>> > On Monday, July 29th, 2024 at 10:32 PM, Stephen Berman
>> > stephen.berman@gmx.net wrote:
>> >
>> > > On Mon, 29 Jul 2024 10:26:22 +0000 Heime heimeborgia@protonmail.com wrote:
>> > >
>> > > > Sent with Proton Mail secure email.
>> > > >
>> > > > On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman
>> > > > stephen.berman@gmx.net wrote:
>> > > >
>> > > > > On Mon, 29 Jul 2024 08:48:38 +0000 Heime heimeborgia@protonmail.com wrote:
>> > > > >
>> > > > > > I wish to list headings in a dedicated buffer with imenu.
>> > > > > > The listing should be in the order in which headings occur
>> > > > > > in the buffer.
>> > > > > >
>> > > > > > Have done the following, but the buffer ends up empty.
>> > > > > >
>> > > > > > (defun vodil-imenu-bfh ()
>> > > > > > "Insert imenu headings in order in a dedicated buffer."
>> > > > > > (interactive)
>> > > > > >
>> > > > > > (let ((imenu-items (imenu--make-index-alist t))
>> > > > > > (buffer-name "Imenu Headings"))
>> > > > > > (with-current-buffer (get-buffer-create buffer-name)
>> > > > > > (erase-buffer)
>> > > > > > (dolist (item imenu-items)
>> > > > > > (let ((name (car item))
>> > > > > > (position (cdr item)))
>> > > > > > (when (and (stringp name) (number-or-marker-p position))
>> > > > > > (insert (format "%s\n" name)))))
>> > > > > > (goto-char (point-min)))
>> > > > > > (pop-to-buffer buffer-name)))
>> > > > >
>> > > > > It works for me, as long as imenu.el is loaded.
>> > > > >
>> > > > > Steve Berman
>> > > >
>> > > > What would I need to load it ?
>> > >
>> > > One way is this:
>> > >
>> > > (defun vodil-imenu-bfh ()
>> > > "Insert imenu headings in order in a dedicated buffer."
>> > > (interactive)
>> > > (eval-when-compile
>> > > (require 'imenu))
>> > > (let ((imenu-items (imenu--make-index-alist t))
>> > > (buffer-name "Imenu Headings"))
>> > > (with-current-buffer (get-buffer-create buffer-name)
>> > > (erase-buffer)
>> > > (dolist (item imenu-items)
>> > > (let ((name (car item))
>> > > (position (cdr item)))
>> > > (when (and (stringp name) (number-or-marker-p position))
>> > > (insert (format "%s\n" name)))))
>> > > (goto-char (point-min)))
>> > > (pop-to-buffer buffer-name)))
>> > >
>> > > Steve Berman
>> >
>> > Right. I have this function that I run. Running vodil-imenu-bfh
>> > after executing vodil-imenu-expr gives me rescan in the buffer.
>> >
>> > (defun vodil-imenu-expr ()
>> > "Set up `imenu` to show a list of functions in the current buffer."
>> >
>> > (interactive)
>> >
>> > (setq imenu-generic-expression
>> > '( ("headings" "^;;;\\s-+\\([HM][[:digit:]]\\)\\s-+\\(.*\\)" 2)))
>> >
>> > (imenu-add-to-menubar "Iml")
>> > (imenu--make-index-alist t)
>> > (call-interactively 'imenu))
>>
>>
>> What were the contents of the current buffer when you executed
>> vodil-imenu-expr?
>>
>> Steve Berman
>
> I had an elisp file.  I ran "M-x vodil-imenu-expr" when in the file to get
> the correct imenu entries.  But executing "M-x vodil-imenu-bfh" after that
> I end up with the buffer "Imenu Headings" having only *rescan* in it.

When I test your code on one of the built-in Emacs Lisp libraries,
e.g. avoid.el, then, on invoking vodil-imenu-expr, I get prompted for an
Index item, and typing TAB, the *Completions* buffer pops up containing
*Rescan* and nil.  I then type C-g and then M-x vodil-imenu-bfh, and the
*Imenu Headings* buffer pops up containing just *Rescan*.  However, when
I start Emacs -Q, evaluate just my emendation of your vodil-imenu-bfh
command, then visit avoid.el and invoking vodil-imenu-bfh, the
*Imenu Headings* buffer pops up containing this:

*Rescan*
mouse-avoidance-set-pointer-shape
mouse-avoidance-point-position
mouse-avoidance-set-mouse-position
mouse-avoidance-too-close-p
mouse-avoidance-banish-destination
mouse-avoidance-banish-mouse
mouse-avoidance-delta
mouse-avoidance-nudge-mouse
mouse-avoidance-random-shape
mouse-avoidance-ignore-p
mouse-avoidance-banish
mouse-avoidance-exile
mouse-avoidance-fancy
mouse-avoidance-mode

So at least the contents of avoid.el does not contain a match for your
setting of imenu-generic-expression, and presumably the same goes for
the file you tested your code on.

Steve Berman



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-29 11:45             ` Stephen Berman
@ 2024-07-29 11:53               ` Heime
  2024-07-29 13:02                 ` Stephen Berman
  0 siblings, 1 reply; 15+ messages in thread
From: Heime @ 2024-07-29 11:53 UTC (permalink / raw)
  To: Stephen Berman; +Cc: Heime via Users list for the GNU Emacs text editor


On Monday, July 29th, 2024 at 11:45 PM, Stephen Berman <stephen.berman@gmx.net> wrote:

> On Mon, 29 Jul 2024 11:29:07 +0000 Heime heimeborgia@protonmail.com wrote:
> 
> > Sent with Proton Mail secure email.
> > 
> > On Monday, July 29th, 2024 at 10:51 PM, Stephen Berman
> > stephen.berman@gmx.net wrote:
> > 
> > > On Mon, 29 Jul 2024 10:41:08 +0000 Heime heimeborgia@protonmail.com wrote:
> > > 
> > > > Sent with Proton Mail secure email.
> > > > 
> > > > On Monday, July 29th, 2024 at 10:32 PM, Stephen Berman
> > > > stephen.berman@gmx.net wrote:
> > > > 
> > > > > On Mon, 29 Jul 2024 10:26:22 +0000 Heime heimeborgia@protonmail.com wrote:
> > > > > 
> > > > > > Sent with Proton Mail secure email.
> > > > > > 
> > > > > > On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman
> > > > > > stephen.berman@gmx.net wrote:
> > > > > > 
> > > > > > > On Mon, 29 Jul 2024 08:48:38 +0000 Heime heimeborgia@protonmail.com wrote:
> > > > > > > 
> > > > > > > > I wish to list headings in a dedicated buffer with imenu.
> > > > > > > > The listing should be in the order in which headings occur
> > > > > > > > in the buffer.
> > > > > > > > 
> > > > > > > > Have done the following, but the buffer ends up empty.
> > > > > > > > 
> > > > > > > > (defun vodil-imenu-bfh ()
> > > > > > > > "Insert imenu headings in order in a dedicated buffer."
> > > > > > > > (interactive)
> > > > > > > > 
> > > > > > > > (let ((imenu-items (imenu--make-index-alist t))
> > > > > > > > (buffer-name "Imenu Headings"))
> > > > > > > > (with-current-buffer (get-buffer-create buffer-name)
> > > > > > > > (erase-buffer)
> > > > > > > > (dolist (item imenu-items)
> > > > > > > > (let ((name (car item))
> > > > > > > > (position (cdr item)))
> > > > > > > > (when (and (stringp name) (number-or-marker-p position))
> > > > > > > > (insert (format "%s\n" name)))))
> > > > > > > > (goto-char (point-min)))
> > > > > > > > (pop-to-buffer buffer-name)))
> > > > > > > 
> > > > > > > It works for me, as long as imenu.el is loaded.
> > > > > > > 
> > > > > > > Steve Berman
> > > > > > 
> > > > > > What would I need to load it ?
> > > > > 
> > > > > One way is this:
> > > > > 
> > > > > (defun vodil-imenu-bfh ()
> > > > > "Insert imenu headings in order in a dedicated buffer."
> > > > > (interactive)
> > > > > (eval-when-compile
> > > > > (require 'imenu))
> > > > > (let ((imenu-items (imenu--make-index-alist t))
> > > > > (buffer-name "Imenu Headings"))
> > > > > (with-current-buffer (get-buffer-create buffer-name)
> > > > > (erase-buffer)
> > > > > (dolist (item imenu-items)
> > > > > (let ((name (car item))
> > > > > (position (cdr item)))
> > > > > (when (and (stringp name) (number-or-marker-p position))
> > > > > (insert (format "%s\n" name)))))
> > > > > (goto-char (point-min)))
> > > > > (pop-to-buffer buffer-name)))
> > > > > 
> > > > > Steve Berman
> > > > 
> > > > Right. I have this function that I run. Running vodil-imenu-bfh
> > > > after executing vodil-imenu-expr gives me rescan in the buffer.
> > > > 
> > > > (defun vodil-imenu-expr ()
> > > > "Set up `imenu` to show a list of functions in the current buffer."
> > > > 
> > > > (interactive)
> > > > 
> > > > (setq imenu-generic-expression
> > > > '( ("headings" "^;;;\\s-+\\([HM][[:digit:]]\\)\\s-+\\(.*\\)" 2)))
> > > > 
> > > > (imenu-add-to-menubar "Iml")
> > > > (imenu--make-index-alist t)
> > > > (call-interactively 'imenu))
> > > 
> > > What were the contents of the current buffer when you executed
> > > vodil-imenu-expr?
> > > 
> > > Steve Berman
> > 
> > I had an elisp file. I ran "M-x vodil-imenu-expr" when in the file to get
> > the correct imenu entries. But executing "M-x vodil-imenu-bfh" after that
> > I end up with the buffer "Imenu Headings" having only rescan in it.
> 
> 
> When I test your code on one of the built-in Emacs Lisp libraries,
> e.g. avoid.el, then, on invoking vodil-imenu-expr, I get prompted for an
> Index item, and typing TAB, the Completions buffer pops up containing
> Rescan and nil. I then type C-g and then M-x vodil-imenu-bfh, and the
> Imenu Headings buffer pops up containing just Rescan. However, when
> I start Emacs -Q, evaluate just my emendation of your vodil-imenu-bfh
> command, then visit avoid.el and invoking vodil-imenu-bfh, the
> Imenu Headings buffer pops up containing this:
> 
> Rescan
> mouse-avoidance-set-pointer-shape
> mouse-avoidance-point-position
> mouse-avoidance-set-mouse-position
> mouse-avoidance-too-close-p
> mouse-avoidance-banish-destination
> mouse-avoidance-banish-mouse
> mouse-avoidance-delta
> mouse-avoidance-nudge-mouse
> mouse-avoidance-random-shape
> mouse-avoidance-ignore-p
> mouse-avoidance-banish
> mouse-avoidance-exile
> mouse-avoidance-fancy
> mouse-avoidance-mode
> 
> So at least the contents of avoid.el does not contain a match for your
> setting of imenu-generic-expression, and presumably the same goes for
> the file you tested your code on.
> 
> Steve Berman

Try with this to pick up (defun

 ("defun" "^\\s-*(defun\\s-+\\([[:word:]-]+\\)") 1)

imenu-generic-expression works on my elisp file.  Only the new buffer has *rescan*



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-29 11:53               ` Heime
@ 2024-07-29 13:02                 ` Stephen Berman
  2024-07-30 15:59                   ` Heime
  0 siblings, 1 reply; 15+ messages in thread
From: Stephen Berman @ 2024-07-29 13:02 UTC (permalink / raw)
  To: Heime; +Cc: Heime via Users list for the GNU Emacs text editor

[I sent this yesterday but it hasn't shown up in the list, so
resending.]

On Mon, 29 Jul 2024 11:53:07 +0000 Heime <heimeborgia@protonmail.com> wrote:

> On Monday, July 29th, 2024 at 11:45 PM, Stephen Berman
> <stephen.berman@gmx.net> wrote:
>
>> On Mon, 29 Jul 2024 11:29:07 +0000 Heime heimeborgia@protonmail.com wrote:
>>
>> > Sent with Proton Mail secure email.
>> >
>> > On Monday, July 29th, 2024 at 10:51 PM, Stephen Berman
>> > stephen.berman@gmx.net wrote:
>> >
>> > > On Mon, 29 Jul 2024 10:41:08 +0000 Heime heimeborgia@protonmail.com wrote:
>> > >
>> > > > Sent with Proton Mail secure email.
>> > > >
>> > > > On Monday, July 29th, 2024 at 10:32 PM, Stephen Berman
>> > > > stephen.berman@gmx.net wrote:
>> > > >
>> > > > > On Mon, 29 Jul 2024 10:26:22 +0000 Heime heimeborgia@protonmail.com wrote:
>> > > > >
>> > > > > > Sent with Proton Mail secure email.
>> > > > > >
>> > > > > > On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman
>> > > > > > stephen.berman@gmx.net wrote:
>> > > > > >
>> > > > > > > On Mon, 29 Jul 2024 08:48:38 +0000 Heime
>> > > > > > > heimeborgia@protonmail.com wrote:
>> > > > > > >
>> > > > > > > > I wish to list headings in a dedicated buffer with imenu.
>> > > > > > > > The listing should be in the order in which headings occur
>> > > > > > > > in the buffer.
>> > > > > > > >
>> > > > > > > > Have done the following, but the buffer ends up empty.
>> > > > > > > >
>> > > > > > > > (defun vodil-imenu-bfh ()
>> > > > > > > > "Insert imenu headings in order in a dedicated buffer."
>> > > > > > > > (interactive)
>> > > > > > > >
>> > > > > > > > (let ((imenu-items (imenu--make-index-alist t))
>> > > > > > > > (buffer-name "Imenu Headings"))
>> > > > > > > > (with-current-buffer (get-buffer-create buffer-name)
>> > > > > > > > (erase-buffer)
>> > > > > > > > (dolist (item imenu-items)
>> > > > > > > > (let ((name (car item))
>> > > > > > > > (position (cdr item)))
>> > > > > > > > (when (and (stringp name) (number-or-marker-p position))
>> > > > > > > > (insert (format "%s\n" name)))))
>> > > > > > > > (goto-char (point-min)))
>> > > > > > > > (pop-to-buffer buffer-name)))
>> > > > > > >
>> > > > > > > It works for me, as long as imenu.el is loaded.
>> > > > > > >
>> > > > > > > Steve Berman
>> > > > > >
>> > > > > > What would I need to load it ?
>> > > > >
>> > > > > One way is this:
>> > > > >
>> > > > > (defun vodil-imenu-bfh ()
>> > > > > "Insert imenu headings in order in a dedicated buffer."
>> > > > > (interactive)
>> > > > > (eval-when-compile
>> > > > > (require 'imenu))
>> > > > > (let ((imenu-items (imenu--make-index-alist t))
>> > > > > (buffer-name "Imenu Headings"))
>> > > > > (with-current-buffer (get-buffer-create buffer-name)
>> > > > > (erase-buffer)
>> > > > > (dolist (item imenu-items)
>> > > > > (let ((name (car item))
>> > > > > (position (cdr item)))
>> > > > > (when (and (stringp name) (number-or-marker-p position))
>> > > > > (insert (format "%s\n" name)))))
>> > > > > (goto-char (point-min)))
>> > > > > (pop-to-buffer buffer-name)))
>> > > > >
>> > > > > Steve Berman
>> > > >
>> > > > Right. I have this function that I run. Running vodil-imenu-bfh
>> > > > after executing vodil-imenu-expr gives me rescan in the buffer.
>> > > >
>> > > > (defun vodil-imenu-expr ()
>> > > > "Set up `imenu` to show a list of functions in the current buffer."
>> > > >
>> > > > (interactive)
>> > > >
>> > > > (setq imenu-generic-expression
>> > > > '( ("headings" "^;;;\\s-+\\([HM][[:digit:]]\\)\\s-+\\(.*\\)" 2)))
>> > > >
>> > > > (imenu-add-to-menubar "Iml")
>> > > > (imenu--make-index-alist t)
>> > > > (call-interactively 'imenu))
>> > >
>> > > What were the contents of the current buffer when you executed
>> > > vodil-imenu-expr?
>> > >
>> > > Steve Berman
>> >
>> > I had an elisp file. I ran "M-x vodil-imenu-expr" when in the file to get
>> > the correct imenu entries. But executing "M-x vodil-imenu-bfh" after that
>> > I end up with the buffer "Imenu Headings" having only rescan in it.
>>
>>
>> When I test your code on one of the built-in Emacs Lisp libraries,
>> e.g. avoid.el, then, on invoking vodil-imenu-expr, I get prompted for an
>> Index item, and typing TAB, the Completions buffer pops up containing
>> Rescan and nil. I then type C-g and then M-x vodil-imenu-bfh, and the
>> Imenu Headings buffer pops up containing just Rescan. However, when
>> I start Emacs -Q, evaluate just my emendation of your vodil-imenu-bfh
>> command, then visit avoid.el and invoking vodil-imenu-bfh, the
>> Imenu Headings buffer pops up containing this:
>>
>> Rescan
>> mouse-avoidance-set-pointer-shape
>> mouse-avoidance-point-position
>> mouse-avoidance-set-mouse-position
>> mouse-avoidance-too-close-p
>> mouse-avoidance-banish-destination
>> mouse-avoidance-banish-mouse
>> mouse-avoidance-delta
>> mouse-avoidance-nudge-mouse
>> mouse-avoidance-random-shape
>> mouse-avoidance-ignore-p
>> mouse-avoidance-banish
>> mouse-avoidance-exile
>> mouse-avoidance-fancy
>> mouse-avoidance-mode
>>
>> So at least the contents of avoid.el does not contain a match for your
>> setting of imenu-generic-expression, and presumably the same goes for
>> the file you tested your code on.
>>
>> Steve Berman
>
> Try with this to pick up (defun
>
>  ("defun" "^\\s-*(defun\\s-+\\([[:word:]-]+\\)") 1)
>
> imenu-generic-expression works on my elisp file.  Only the new buffer has *rescan*

Ok, now I see the problem: the list produced by imenu--make-index-alist
contains two elements: ("*Rescan*" . -99) is the first, and the second
is a list whose car is "defun" (or for your file presumably "headings")
and whose cdr is the list of strings from the matching elements
(defuns/headings) in the file with their positions.  What you want to
loop over is just the latter list.  So it should work if you use this in
vodil-imenu-bfh:

  (let ((imenu-items (cdadr (imenu--make-index-alist t)))
        ...)
    ...)

Steve Berman



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-29 13:02                 ` Stephen Berman
@ 2024-07-30 15:59                   ` Heime
  2024-07-30 21:30                     ` Heime
  0 siblings, 1 reply; 15+ messages in thread
From: Heime @ 2024-07-30 15:59 UTC (permalink / raw)
  To: Stephen Berman; +Cc: Heime via Users list for the GNU Emacs text editor

On Tuesday, July 30th, 2024 at 1:02 AM, Stephen Berman <stephen.berman@gmx.net> wrote:

> [I sent this yesterday but it hasn't shown up in the list, so
> resending.]
> 
> On Mon, 29 Jul 2024 11:53:07 +0000 Heime heimeborgia@protonmail.com wrote:
> 
> > On Monday, July 29th, 2024 at 11:45 PM, Stephen Berman
> > stephen.berman@gmx.net wrote:
> > 
> > > On Mon, 29 Jul 2024 11:29:07 +0000 Heime heimeborgia@protonmail.com wrote:
> > > 
> > > > Sent with Proton Mail secure email.
> > > > 
> > > > On Monday, July 29th, 2024 at 10:51 PM, Stephen Berman
> > > > stephen.berman@gmx.net wrote:
> > > > 
> > > > > On Mon, 29 Jul 2024 10:41:08 +0000 Heime heimeborgia@protonmail.com wrote:
> > > > > 
> > > > > > Sent with Proton Mail secure email.
> > > > > > 
> > > > > > On Monday, July 29th, 2024 at 10:32 PM, Stephen Berman
> > > > > > stephen.berman@gmx.net wrote:
> > > > > > 
> > > > > > > On Mon, 29 Jul 2024 10:26:22 +0000 Heime heimeborgia@protonmail.com wrote:
> > > > > > > 
> > > > > > > > Sent with Proton Mail secure email.
> > > > > > > > 
> > > > > > > > On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman
> > > > > > > > stephen.berman@gmx.net wrote:
> > > > > > > > 
> > > > > > > > > On Mon, 29 Jul 2024 08:48:38 +0000 Heime
> > > > > > > > > heimeborgia@protonmail.com wrote:
> > > > > > > > > 
> > > > > > > > > > I wish to list headings in a dedicated buffer with imenu.
> > > > > > > > > > The listing should be in the order in which headings occur
> > > > > > > > > > in the buffer.
> > > > > > > > > > 
> > > > > > > > > > Have done the following, but the buffer ends up empty.
> > > > > > > > > > 
> > > > > > > > > > (defun vodil-imenu-bfh ()
> > > > > > > > > > "Insert imenu headings in order in a dedicated buffer."
> > > > > > > > > > (interactive)
> > > > > > > > > > 
> > > > > > > > > > (let ((imenu-items (imenu--make-index-alist t))
> > > > > > > > > > (buffer-name "Imenu Headings"))
> > > > > > > > > > (with-current-buffer (get-buffer-create buffer-name)
> > > > > > > > > > (erase-buffer)
> > > > > > > > > > (dolist (item imenu-items)
> > > > > > > > > > (let ((name (car item))
> > > > > > > > > > (position (cdr item)))
> > > > > > > > > > (when (and (stringp name) (number-or-marker-p position))
> > > > > > > > > > (insert (format "%s\n" name)))))
> > > > > > > > > > (goto-char (point-min)))
> > > > > > > > > > (pop-to-buffer buffer-name)))
> > > > > > > > > 
> > > > > > > > > It works for me, as long as imenu.el is loaded.
> > > > > > > > > 
> > > > > > > > > Steve Berman
> > > > > > > > 
> > > > > > > > What would I need to load it ?
> > > > > > > 
> > > > > > > One way is this:
> > > > > > > 
> > > > > > > (defun vodil-imenu-bfh ()
> > > > > > > "Insert imenu headings in order in a dedicated buffer."
> > > > > > > (interactive)
> > > > > > > (eval-when-compile
> > > > > > > (require 'imenu))
> > > > > > > (let ((imenu-items (imenu--make-index-alist t))
> > > > > > > (buffer-name "Imenu Headings"))
> > > > > > > (with-current-buffer (get-buffer-create buffer-name)
> > > > > > > (erase-buffer)
> > > > > > > (dolist (item imenu-items)
> > > > > > > (let ((name (car item))
> > > > > > > (position (cdr item)))
> > > > > > > (when (and (stringp name) (number-or-marker-p position))
> > > > > > > (insert (format "%s\n" name)))))
> > > > > > > (goto-char (point-min)))
> > > > > > > (pop-to-buffer buffer-name)))
> > > > > > > 
> > > > > > > Steve Berman
> > > > > > 
> > > > > > Right. I have this function that I run. Running vodil-imenu-bfh
> > > > > > after executing vodil-imenu-expr gives me rescan in the buffer.
> > > > > > 
> > > > > > (defun vodil-imenu-expr ()
> > > > > > "Set up `imenu` to show a list of functions in the current buffer."
> > > > > > 
> > > > > > (interactive)
> > > > > > 
> > > > > > (setq imenu-generic-expression
> > > > > > '( ("headings" "^;;;\\s-+\\([HM][[:digit:]]\\)\\s-+\\(.*\\)" 2)))
> > > > > > 
> > > > > > (imenu-add-to-menubar "Iml")
> > > > > > (imenu--make-index-alist t)
> > > > > > (call-interactively 'imenu))
> > > > > 
> > > > > What were the contents of the current buffer when you executed
> > > > > vodil-imenu-expr?
> > > > > 
> > > > > Steve Berman
> > > > 
> > > > I had an elisp file. I ran "M-x vodil-imenu-expr" when in the file to get
> > > > the correct imenu entries. But executing "M-x vodil-imenu-bfh" after that
> > > > I end up with the buffer "Imenu Headings" having only rescan in it.
> > > 
> > > When I test your code on one of the built-in Emacs Lisp libraries,
> > > e.g. avoid.el, then, on invoking vodil-imenu-expr, I get prompted for an
> > > Index item, and typing TAB, the Completions buffer pops up containing
> > > Rescan and nil. I then type C-g and then M-x vodil-imenu-bfh, and the
> > > Imenu Headings buffer pops up containing just Rescan. However, when
> > > I start Emacs -Q, evaluate just my emendation of your vodil-imenu-bfh
> > > command, then visit avoid.el and invoking vodil-imenu-bfh, the
> > > Imenu Headings buffer pops up containing this:
> > > 
> > > Rescan
> > > mouse-avoidance-set-pointer-shape
> > > mouse-avoidance-point-position
> > > mouse-avoidance-set-mouse-position
> > > mouse-avoidance-too-close-p
> > > mouse-avoidance-banish-destination
> > > mouse-avoidance-banish-mouse
> > > mouse-avoidance-delta
> > > mouse-avoidance-nudge-mouse
> > > mouse-avoidance-random-shape
> > > mouse-avoidance-ignore-p
> > > mouse-avoidance-banish
> > > mouse-avoidance-exile
> > > mouse-avoidance-fancy
> > > mouse-avoidance-mode
> > > 
> > > So at least the contents of avoid.el does not contain a match for your
> > > setting of imenu-generic-expression, and presumably the same goes for
> > > the file you tested your code on.
> > > 
> > > Steve Berman
> > 
> > Try with this to pick up (defun
> > 
> > ("defun" "^\\s-*(defun\\s-+\\([[:word:]-]+\\)") 1)
> > 
> > imenu-generic-expression works on my elisp file. Only the new buffer has rescan
> 
> 
> Ok, now I see the problem: the list produced by imenu--make-index-alist
> contains two elements: ("Rescan" . -99) is the first, and the second
> is a list whose car is "defun" (or for your file presumably "headings")
> and whose cdr is the list of strings from the matching elements
> (defuns/headings) in the file with their positions. What you want to
> loop over is just the latter list. So it should work if you use this in
> vodil-imenu-bfh:
> 
> (let ((imenu-items (cdadr (imenu--make-index-alist t)))
> ...)
> ...)
> 
> Steve Berman

Now things are working as I hoped.





^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-30 15:59                   ` Heime
@ 2024-07-30 21:30                     ` Heime
  2024-07-31  8:35                       ` Stephen Berman
  0 siblings, 1 reply; 15+ messages in thread
From: Heime @ 2024-07-30 21:30 UTC (permalink / raw)
  To: Heime; +Cc: Stephen Berman,
	Heime via Users list for the GNU Emacs text editor






Sent with Proton Mail secure email.

On Wednesday, July 31st, 2024 at 3:59 AM, Heime <heimeborgia@protonmail.com> wrote:

> On Tuesday, July 30th, 2024 at 1:02 AM, Stephen Berman stephen.berman@gmx.net wrote:
> 
> > [I sent this yesterday but it hasn't shown up in the list, so
> > resending.]
> > 
> > On Mon, 29 Jul 2024 11:53:07 +0000 Heime heimeborgia@protonmail.com wrote:
> > 
> > > On Monday, July 29th, 2024 at 11:45 PM, Stephen Berman
> > > stephen.berman@gmx.net wrote:
> > > 
> > > > On Mon, 29 Jul 2024 11:29:07 +0000 Heime heimeborgia@protonmail.com wrote:
> > > > 
> > > > > Sent with Proton Mail secure email.
> > > > > 
> > > > > On Monday, July 29th, 2024 at 10:51 PM, Stephen Berman
> > > > > stephen.berman@gmx.net wrote:
> > > > > 
> > > > > > On Mon, 29 Jul 2024 10:41:08 +0000 Heime heimeborgia@protonmail.com wrote:
> > > > > > 
> > > > > > > Sent with Proton Mail secure email.
> > > > > > > 
> > > > > > > On Monday, July 29th, 2024 at 10:32 PM, Stephen Berman
> > > > > > > stephen.berman@gmx.net wrote:
> > > > > > > 
> > > > > > > > On Mon, 29 Jul 2024 10:26:22 +0000 Heime heimeborgia@protonmail.com wrote:
> > > > > > > > 
> > > > > > > > > Sent with Proton Mail secure email.
> > > > > > > > > 
> > > > > > > > > On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman
> > > > > > > > > stephen.berman@gmx.net wrote:
> > > > > > > > > 
> > > > > > > > > > On Mon, 29 Jul 2024 08:48:38 +0000 Heime
> > > > > > > > > > heimeborgia@protonmail.com wrote:
> > > > > > > > > > 
> > > > > > > > > > > I wish to list headings in a dedicated buffer with imenu.
> > > > > > > > > > > The listing should be in the order in which headings occur
> > > > > > > > > > > in the buffer.
> > > > > > > > > > > 
> > > > > > > > > > > Have done the following, but the buffer ends up empty.
> > > > > > > > > > > 
> > > > > > > > > > > (defun vodil-imenu-bfh ()
> > > > > > > > > > > "Insert imenu headings in order in a dedicated buffer."
> > > > > > > > > > > (interactive)
> > > > > > > > > > > 
> > > > > > > > > > > (let ((imenu-items (imenu--make-index-alist t))
> > > > > > > > > > > (buffer-name "Imenu Headings"))
> > > > > > > > > > > (with-current-buffer (get-buffer-create buffer-name)
> > > > > > > > > > > (erase-buffer)
> > > > > > > > > > > (dolist (item imenu-items)
> > > > > > > > > > > (let ((name (car item))
> > > > > > > > > > > (position (cdr item)))
> > > > > > > > > > > (when (and (stringp name) (number-or-marker-p position))
> > > > > > > > > > > (insert (format "%s\n" name)))))
> > > > > > > > > > > (goto-char (point-min)))
> > > > > > > > > > > (pop-to-buffer buffer-name)))
> > > > > > > > > > 
> > > > > > > > > > It works for me, as long as imenu.el is loaded.
> > > > > > > > > > 
> > > > > > > > > > Steve Berman
> > > > > > > > > 
> > > > > > > > > What would I need to load it ?
> > > > > > > > 
> > > > > > > > One way is this:
> > > > > > > > 
> > > > > > > > (defun vodil-imenu-bfh ()
> > > > > > > > "Insert imenu headings in order in a dedicated buffer."
> > > > > > > > (interactive)
> > > > > > > > (eval-when-compile
> > > > > > > > (require 'imenu))
> > > > > > > > (let ((imenu-items (imenu--make-index-alist t))
> > > > > > > > (buffer-name "Imenu Headings"))
> > > > > > > > (with-current-buffer (get-buffer-create buffer-name)
> > > > > > > > (erase-buffer)
> > > > > > > > (dolist (item imenu-items)
> > > > > > > > (let ((name (car item))
> > > > > > > > (position (cdr item)))
> > > > > > > > (when (and (stringp name) (number-or-marker-p position))
> > > > > > > > (insert (format "%s\n" name)))))
> > > > > > > > (goto-char (point-min)))
> > > > > > > > (pop-to-buffer buffer-name)))
> > > > > > > > 
> > > > > > > > Steve Berman
> > > > > > > 
> > > > > > > Right. I have this function that I run. Running vodil-imenu-bfh
> > > > > > > after executing vodil-imenu-expr gives me rescan in the buffer.
> > > > > > > 
> > > > > > > (defun vodil-imenu-expr ()
> > > > > > > "Set up `imenu` to show a list of functions in the current buffer."
> > > > > > > 
> > > > > > > (interactive)
> > > > > > > 
> > > > > > > (setq imenu-generic-expression
> > > > > > > '( ("headings" "^;;;\\s-+\\([HM][[:digit:]]\\)\\s-+\\(.*\\)" 2)))
> > > > > > > 
> > > > > > > (imenu-add-to-menubar "Iml")
> > > > > > > (imenu--make-index-alist t)
> > > > > > > (call-interactively 'imenu))
> > > > > > 
> > > > > > What were the contents of the current buffer when you executed
> > > > > > vodil-imenu-expr?
> > > > > > 
> > > > > > Steve Berman
> > > > > 
> > > > > I had an elisp file. I ran "M-x vodil-imenu-expr" when in the file to get
> > > > > the correct imenu entries. But executing "M-x vodil-imenu-bfh" after that
> > > > > I end up with the buffer "Imenu Headings" having only rescan in it.
> > > > 
> > > > When I test your code on one of the built-in Emacs Lisp libraries,
> > > > e.g. avoid.el, then, on invoking vodil-imenu-expr, I get prompted for an
> > > > Index item, and typing TAB, the Completions buffer pops up containing
> > > > Rescan and nil. I then type C-g and then M-x vodil-imenu-bfh, and the
> > > > Imenu Headings buffer pops up containing just Rescan. However, when
> > > > I start Emacs -Q, evaluate just my emendation of your vodil-imenu-bfh
> > > > command, then visit avoid.el and invoking vodil-imenu-bfh, the
> > > > Imenu Headings buffer pops up containing this:
> > > > 
> > > > Rescan
> > > > mouse-avoidance-set-pointer-shape
> > > > mouse-avoidance-point-position
> > > > mouse-avoidance-set-mouse-position
> > > > mouse-avoidance-too-close-p
> > > > mouse-avoidance-banish-destination
> > > > mouse-avoidance-banish-mouse
> > > > mouse-avoidance-delta
> > > > mouse-avoidance-nudge-mouse
> > > > mouse-avoidance-random-shape
> > > > mouse-avoidance-ignore-p
> > > > mouse-avoidance-banish
> > > > mouse-avoidance-exile
> > > > mouse-avoidance-fancy
> > > > mouse-avoidance-mode
> > > > 
> > > > So at least the contents of avoid.el does not contain a match for your
> > > > setting of imenu-generic-expression, and presumably the same goes for
> > > > the file you tested your code on.
> > > > 
> > > > Steve Berman
> > > 
> > > Try with this to pick up (defun
> > > 
> > > ("defun" "^\\s-*(defun\\s-+\\([[:word:]-]+\\)") 1)
> > > 
> > > imenu-generic-expression works on my elisp file. Only the new buffer has rescan
> > 
> > Ok, now I see the problem: the list produced by imenu--make-index-alist
> > contains two elements: ("Rescan" . -99) is the first, and the second
> > is a list whose car is "defun" (or for your file presumably "headings")
> > and whose cdr is the list of strings from the matching elements
> > (defuns/headings) in the file with their positions. What you want to
> > loop over is just the latter list. So it should work if you use this in
> > vodil-imenu-bfh:
> > 
> > (let ((imenu-items (cdadr (imenu--make-index-alist t)))
> > ...)
> > ...)
> > 
> > Steve Berman
> 
> 
> Now things are working as I hoped.
> 

Would you be so kind to explain why I need cdadr ?  It returns the 
`cdr' of the `car' of the `cdr'.  A quite complicated thing for me.




^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Listing headings in dedicated buffer with imenu.
  2024-07-30 21:30                     ` Heime
@ 2024-07-31  8:35                       ` Stephen Berman
  0 siblings, 0 replies; 15+ messages in thread
From: Stephen Berman @ 2024-07-31  8:35 UTC (permalink / raw)
  To: Heime; +Cc: Heime via Users list for the GNU Emacs text editor

On Tue, 30 Jul 2024 21:30:28 +0000 Heime <heimeborgia@protonmail.com> wrote:

> Sent with Proton Mail secure email.
>
> On Wednesday, July 31st, 2024 at 3:59 AM, Heime <heimeborgia@protonmail.com> wrote:
>
>> On Tuesday, July 30th, 2024 at 1:02 AM, Stephen Berman
>> stephen.berman@gmx.net wrote:
>>
>> > [I sent this yesterday but it hasn't shown up in the list, so
>> > resending.]
>> >
>> > On Mon, 29 Jul 2024 11:53:07 +0000 Heime heimeborgia@protonmail.com wrote:
>> >
>> > > On Monday, July 29th, 2024 at 11:45 PM, Stephen Berman
>> > > stephen.berman@gmx.net wrote:
>> > >
>> > > > On Mon, 29 Jul 2024 11:29:07 +0000 Heime heimeborgia@protonmail.com wrote:
>> > > >
>> > > > > Sent with Proton Mail secure email.
>> > > > >
>> > > > > On Monday, July 29th, 2024 at 10:51 PM, Stephen Berman
>> > > > > stephen.berman@gmx.net wrote:
>> > > > >
>> > > > > > On Mon, 29 Jul 2024 10:41:08 +0000 Heime
>> > > > > > heimeborgia@protonmail.com wrote:
>> > > > > >
>> > > > > > > Sent with Proton Mail secure email.
>> > > > > > >
>> > > > > > > On Monday, July 29th, 2024 at 10:32 PM, Stephen Berman
>> > > > > > > stephen.berman@gmx.net wrote:
>> > > > > > >
>> > > > > > > > On Mon, 29 Jul 2024 10:26:22 +0000 Heime
>> > > > > > > > heimeborgia@protonmail.com wrote:
>> > > > > > > >
>> > > > > > > > > Sent with Proton Mail secure email.
>> > > > > > > > >
>> > > > > > > > > On Monday, July 29th, 2024 at 9:33 PM, Stephen Berman
>> > > > > > > > > stephen.berman@gmx.net wrote:
>> > > > > > > > >
>> > > > > > > > > > On Mon, 29 Jul 2024 08:48:38 +0000 Heime
>> > > > > > > > > > heimeborgia@protonmail.com wrote:
>> > > > > > > > > >
>> > > > > > > > > > > I wish to list headings in a dedicated buffer with imenu.
>> > > > > > > > > > > The listing should be in the order in which headings occur
>> > > > > > > > > > > in the buffer.
>> > > > > > > > > > >
>> > > > > > > > > > > Have done the following, but the buffer ends up empty.
>> > > > > > > > > > >
>> > > > > > > > > > > (defun vodil-imenu-bfh ()
>> > > > > > > > > > > "Insert imenu headings in order in a dedicated buffer."
>> > > > > > > > > > > (interactive)
>> > > > > > > > > > >
>> > > > > > > > > > > (let ((imenu-items (imenu--make-index-alist t))
>> > > > > > > > > > > (buffer-name "Imenu Headings"))
>> > > > > > > > > > > (with-current-buffer (get-buffer-create buffer-name)
>> > > > > > > > > > > (erase-buffer)
>> > > > > > > > > > > (dolist (item imenu-items)
>> > > > > > > > > > > (let ((name (car item))
>> > > > > > > > > > > (position (cdr item)))
>> > > > > > > > > > > (when (and (stringp name) (number-or-marker-p position))
>> > > > > > > > > > > (insert (format "%s\n" name)))))
>> > > > > > > > > > > (goto-char (point-min)))
>> > > > > > > > > > > (pop-to-buffer buffer-name)))
>> > > > > > > > > >
>> > > > > > > > > > It works for me, as long as imenu.el is loaded.
>> > > > > > > > > >
>> > > > > > > > > > Steve Berman
>> > > > > > > > >
>> > > > > > > > > What would I need to load it ?
>> > > > > > > >
>> > > > > > > > One way is this:
>> > > > > > > >
>> > > > > > > > (defun vodil-imenu-bfh ()
>> > > > > > > > "Insert imenu headings in order in a dedicated buffer."
>> > > > > > > > (interactive)
>> > > > > > > > (eval-when-compile
>> > > > > > > > (require 'imenu))
>> > > > > > > > (let ((imenu-items (imenu--make-index-alist t))
>> > > > > > > > (buffer-name "Imenu Headings"))
>> > > > > > > > (with-current-buffer (get-buffer-create buffer-name)
>> > > > > > > > (erase-buffer)
>> > > > > > > > (dolist (item imenu-items)
>> > > > > > > > (let ((name (car item))
>> > > > > > > > (position (cdr item)))
>> > > > > > > > (when (and (stringp name) (number-or-marker-p position))
>> > > > > > > > (insert (format "%s\n" name)))))
>> > > > > > > > (goto-char (point-min)))
>> > > > > > > > (pop-to-buffer buffer-name)))
>> > > > > > > >
>> > > > > > > > Steve Berman
>> > > > > > >
>> > > > > > > Right. I have this function that I run. Running vodil-imenu-bfh
>> > > > > > > after executing vodil-imenu-expr gives me rescan in the buffer.
>> > > > > > >
>> > > > > > > (defun vodil-imenu-expr ()
>> > > > > > > "Set up `imenu` to show a list of functions in the current buffer."
>> > > > > > >
>> > > > > > > (interactive)
>> > > > > > >
>> > > > > > > (setq imenu-generic-expression
>> > > > > > > '( ("headings" "^;;;\\s-+\\([HM][[:digit:]]\\)\\s-+\\(.*\\)" 2)))
>> > > > > > >
>> > > > > > > (imenu-add-to-menubar "Iml")
>> > > > > > > (imenu--make-index-alist t)
>> > > > > > > (call-interactively 'imenu))
>> > > > > >
>> > > > > > What were the contents of the current buffer when you executed
>> > > > > > vodil-imenu-expr?
>> > > > > >
>> > > > > > Steve Berman
>> > > > >
>> > > > > I had an elisp file. I ran "M-x vodil-imenu-expr" when in the file to get
>> > > > > the correct imenu entries. But executing "M-x vodil-imenu-bfh" after that
>> > > > > I end up with the buffer "Imenu Headings" having only rescan in it.
>> > > >
>> > > > When I test your code on one of the built-in Emacs Lisp libraries,
>> > > > e.g. avoid.el, then, on invoking vodil-imenu-expr, I get prompted for an
>> > > > Index item, and typing TAB, the Completions buffer pops up containing
>> > > > Rescan and nil. I then type C-g and then M-x vodil-imenu-bfh, and the
>> > > > Imenu Headings buffer pops up containing just Rescan. However, when
>> > > > I start Emacs -Q, evaluate just my emendation of your vodil-imenu-bfh
>> > > > command, then visit avoid.el and invoking vodil-imenu-bfh, the
>> > > > Imenu Headings buffer pops up containing this:
>> > > >
>> > > > Rescan
>> > > > mouse-avoidance-set-pointer-shape
>> > > > mouse-avoidance-point-position
>> > > > mouse-avoidance-set-mouse-position
>> > > > mouse-avoidance-too-close-p
>> > > > mouse-avoidance-banish-destination
>> > > > mouse-avoidance-banish-mouse
>> > > > mouse-avoidance-delta
>> > > > mouse-avoidance-nudge-mouse
>> > > > mouse-avoidance-random-shape
>> > > > mouse-avoidance-ignore-p
>> > > > mouse-avoidance-banish
>> > > > mouse-avoidance-exile
>> > > > mouse-avoidance-fancy
>> > > > mouse-avoidance-mode
>> > > >
>> > > > So at least the contents of avoid.el does not contain a match for your
>> > > > setting of imenu-generic-expression, and presumably the same goes for
>> > > > the file you tested your code on.
>> > > >
>> > > > Steve Berman
>> > >
>> > > Try with this to pick up (defun
>> > >
>> > > ("defun" "^\\s-*(defun\\s-+\\([[:word:]-]+\\)") 1)
>> > >
>> > > imenu-generic-expression works on my elisp file. Only the new buffer has rescan
>> >
>> > Ok, now I see the problem: the list produced by imenu--make-index-alist
>> > contains two elements: ("Rescan" . -99) is the first, and the second
>> > is a list whose car is "defun" (or for your file presumably "headings")
>> > and whose cdr is the list of strings from the matching elements
>> > (defuns/headings) in the file with their positions. What you want to
>> > loop over is just the latter list. So it should work if you use this in
>> > vodil-imenu-bfh:
>> >
>> > (let ((imenu-items (cdadr (imenu--make-index-alist t)))
>> > ...)
>> > ...)
>> >
>> > Steve Berman
>>
>>
>> Now things are working as I hoped.
>>
>
> Would you be so kind to explain why I need cdadr ?  It returns the
> `cdr' of the `car' of the `cdr'.  A quite complicated thing for me.

As I noted, imenu--make-index-alist returns a two-element list, which
looks like this (using "defun" and avoid.el for a specific example, and
formatting for legibility):

(("*Rescan*" . -99)
 ("defun"
  ("mouse-avoidance-point-position" . #<marker at 5353 in avoid.el>)
  ("mouse-avoidance-set-mouse-position" . #<marker at 5959 in avoid.el>)
  ("mouse-avoidance-too-close-p" . #<marker at 6191 in avoid.el>)
  ("mouse-avoidance-banish-destination" . #<marker at 6974 in avoid.el>)
  ("mouse-avoidance-banish-mouse" . #<marker at 9012 in avoid.el>)
  ("mouse-avoidance-nudge-mouse" . #<marker at 10063 in avoid.el>)
  ("mouse-avoidance-random-shape" . #<marker at 11753 in avoid.el>)
  ("mouse-avoidance-ignore-p" . #<marker at 12482 in avoid.el>)
  ("mouse-avoidance-banish" . #<marker at 13768 in avoid.el>)
  ("mouse-avoidance-exile" . #<marker at 13880 in avoid.el>)
  ("mouse-avoidance-fancy" . #<marker at 14740 in avoid.el>)
  ("mouse-avoidance-mode" . #<marker at 15183 in avoid.el>)))

You want to loop over the list of cons cells containing the function
names and their positions in the file.  To get this list, first take the
cdr of the above list, giving

(("defun" ("mouse-avoidance-mode" . "<marker at 5353 in avoid") ...))

, then take the car of this, giving

("defun" ("mouse-avoidance-mode" . "<marker at 5353 in avoid") ...)

, then finally take the cdr of this, giving

(("mouse-avoidance-mode" . "<marker at 5353 in avoid") ...)

, which is the list you want.  In Lisp:

(cdr (car (cdr (("*Rescan*" . 99) ("defun" ("mouse-avoidance-mode"
. "<marker at 5353 in avoid") ...)))))

Since this sequence of invocations is common, the function `cdadr' was
introduced to facilitate applying it.  (Likewise, there are a number of
other functions for various combinations of `car' and `cdr'; in Emacs
these are all in the subr.el library.)

Steve Berman



^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2024-07-31  8:35 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-29  8:48 Listing headings in dedicated buffer with imenu Heime
2024-07-29  9:33 ` Stephen Berman
2024-07-29 10:26   ` Heime
2024-07-29 10:32     ` Heime
2024-07-29 10:32     ` Stephen Berman
2024-07-29 10:41       ` Heime
2024-07-29 10:51         ` Stephen Berman
2024-07-29 11:29           ` Heime
2024-07-29 11:45             ` Stephen Berman
2024-07-29 11:53               ` Heime
2024-07-29 13:02                 ` Stephen Berman
2024-07-30 15:59                   ` Heime
2024-07-30 21:30                     ` Heime
2024-07-31  8:35                       ` Stephen Berman
2024-07-29 11:43       ` Sharon Kimble

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.