Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bmag/imenu-list
Emacs plugin to show the current buffer's imenu entries in a separate buffer
https://github.com/bmag/imenu-list
Last synced: about 1 month ago
JSON representation
Emacs plugin to show the current buffer's imenu entries in a separate buffer
- Host: GitHub
- URL: https://github.com/bmag/imenu-list
- Owner: bmag
- License: gpl-3.0
- Created: 2015-02-28T16:44:45.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2024-06-10T03:49:50.000Z (6 months ago)
- Last Synced: 2024-08-02T16:46:10.867Z (4 months ago)
- Language: Emacs Lisp
- Homepage:
- Size: 678 KB
- Stars: 321
- Watchers: 10
- Forks: 27
- Open Issues: 22
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- my-awesome-github-stars - bmag/imenu-list - Emacs plugin to show the current buffer's imenu entries in a separate buffer (Emacs Lisp)
README
# imenu-list
This Emacs minor-mode creates an automatically updated buffer called `*Ilist*` that is populated with the current buffer's imenu entries. The `*Ilist*` buffer is typically shown as a sidebar (Emacs vertically splits the window).To activate imenu-list manually, use `M-x imenu-list-minor-mode`.
To activate it automatically on startup, add this to your init file:
`(imenu-list-minor-mode)`You can also use `M-x imenu-list-smart-toggle` to toggle imenu-list (and its window) on and off.
You may wish to bind it to a key, for example `C-'`:
```elisp
(global-set-key (kbd "C-'") #'imenu-list-smart-toggle)
```
The old suggestion was to bind `imenu-list-minor-mode`; however, `imenu-list-minor-mode` does not take the visibility of the `*Ilist*` buffer into account, and only checks the current value of `imenu-list-minor-mode`. The smart-toggle enables or disables the minor-mode depending on the visibility of the `*Ilist*` buffer.The imenu of the current buffer will be displayed in the `*Ilist*` buffer. From the `*Ilist*` buffer, you can use these shortcuts:
- ``: goto entry under cursor, or toggle case-folding.
- ``: display entry under cursor, but `*Ilist*` buffer remains current
- ``: same as \
- ``: expand/collapse subtree (`hs-toggle-hiding`)
- `f`: same as \
- `n`: next line
- `p`: previous line
- `g`: manually refresh entries
- `q`: quit window and disable `imenu-list-minor-mode`Some users might prefer the `imenu-list-minor-mode`/`imenu-list-smart-toggle` commands to also set the focus to the `*Ilist*` window.
To do so, use the variable `imenu-list-focus-after-activation`:
```elisp
(setq imenu-list-focus-after-activation t)
```The size of `*Ilist*` window can be automatically resized every time the `*Ilist*` buffer is
updated. To do so, use the variable `imenu-list-auto-resize`:
```elisp
(setq imenu-list-auto-resize t)
```
Note that the width of the window won't be resized if you're using emacs 24.3 or older.
That's because of a limitation in `fit-window-to-buffer`.
It is possible to take further actions every time the `*Ilist*` buffer is updated, by using
the hook `imenu-list-update-hook`.After jumping to an entry from the `*Ilist*` buffer, e.g. by pressing `` or ``, the target buffer will be recentered so the cursor is in the middle. To cancel that, reset the hook `imenu-list-after-jump-hook`:
```elisp
(setq imenu-list-after-jump-hook nil)
```To use a different recentering logic, for example `recenter-top-bottom`, use the following:
```elisp
(setq imenu-list-after-jump-hook nil)
(add-hook 'imenu-list-after-jump-hook #'recenter-top-bottom)
```## Automatic Update
When `imenu-list-minor-mode` is enabled, the `*Ilist*` buffer is updated automatically whenever the user is idle, with a default delay time of 0.5 seconds. To change the delay time, set the value of `imenu-list-idle-update-delay-time`.
## Display
imenu-list has several faces for showing different levels of nesting in the `*Ilist*` buffer. To customize them, see `M-x customize-group RET imenu-list RET`.The mode-line of `*Ilist*` buffer can be changed by customizing `imenu-list-mode-line-format`, also available via `M-x customize-group RET imenu-list RET`.
Here are some pictures. Note that you can hide/show parts of the imenu list.
![](https://github.com/bmag/imenu-list/blob/master/images/imenu-list-light.png)
![](https://github.com/bmag/imenu-list/blob/master/images/imenu-list-dark.png)
## Window Position and Size
The size and position of `*Ilist*` window can be changed by customizing these variables:
- `imenu-list-position`: should be `left`, `right`, `above` or `below`, to display the window
at the left, right, top or bottom of the frame.
- `imenu-list-size`: should be a positive integer or a percentage. If integer, decides the total
number of rows/columns the window has. If percentage (0 < `imenu-list-size` < 1), decides the
number of rows/columns relative to the total number of rows/columns in the frame.imenu-list controls its display by adding an entry to `display-buffer-alist`. If you want
fuller control over how the window is displayed, you should replace that entry.If imenu-list can't open a new window (could happen when the frame is small or already split into many windows),
the window will be displayed using the regular rules of `display-buffer`.### window-purpose
For users of `window-purpose`, imenu-list adds an entry to `purpose-special-action-sequences`.
If you want fuller control over how the window is displayed, you should replace that entry.