---
title: "imenu-list 이맥스 버퍼 TOC 프레임워크"
url: "https://notes.junghanacs.com/notes/20250227T143549"
author: "Junghan Kim"
date: "2025-02-27T14:35:00+09:00"
lastmod: "2025-02-27T14:35:00+09:00"
tags: ["bib"]
description: "imenu-list를 버퍼용 TOC 프레임워크로 활용하는 방법을 정리한 노트이다."
---

> [!abstract] 이 노트에 대하여
> 
> 현재 버퍼의 imenu 엔트리를 별도 창에 띄워 TOC처럼 쓰는 imenu-list의 장점과 설정을 다룬다. treemacs와의 관계, minor mode 제어까지 연결되는 편집 도구 노트다.

## BIBLIOGRAPHY

- “Alphapapa/Outshine Outline-Mode.” 2025. <https://github.com/alphapapa/outshine>.
- Charles Choi. n.d. “Til Imenu.” Accessed July 3, 2024. <http://yummymelon.com/devnull/til-imenu.html>.
- “Junghan0611/Imenu-List.” 2025. <https://github.com/junghan0611/imenu-list>.
- “Localauthor/Org-Side-Tree Outline-Mode.” 2025. <https://github.com/localauthor/org-side-tree>.

## 히스토리

-   [2025-02-27 Thu 14:35] 너무 중요하고 편리한 녀석

## 관련노트

-   [notes/ imenu§outline§heading 헤딩 레벨 키바인딩의 핵심 - Alt 통일 '2025-02-27 #2025-02-27](https://notes.junghanacs.com/notes/20250227T195539)
-   [notes/ §imenu-list #이맥스#트리맥스 '2025-02-28 #2025-02-28](https://notes.junghanacs.com/notes/20250228T111435)

## [outline/heading 이맥스 키바인딩 일관성](https://notes.junghanacs.com/notes/20250227T195539)

## [imenu-list left - treemacs right with winum mode-line (2025-02-28)](https://notes.junghanacs.com/notes/20250228T111435)

## junghan0611/imenu-list - 커스텀버전

([“Junghan0611/Imenu-List” 2025](https://notes.junghanacs.com/notes/20250227T143549#citeproc_bib_item_3))

-   Han, Jung
-   Emacs plugin to show the current buffer's imenu entries in a separate buffer
-   2025

## [2025-02-27 W08](https://notes.junghanacs.com/journal/20250224T000000)

@user imenu-list를 treemacs 버퍼에서는 disable 하려면 어떻게 해야 할까?

@assistant `imenu-list` 를 Treemacs 버퍼에서 비활성화하려면, `imenu-list-minor-mode` 를 Treemacs 버퍼에서 해제해야 합니다. 이를 위해 Emacs의 `imenu-list` 설정 파일이나 `.emacs` 파일에서 Treemacs 버퍼에 대한 특정 조건을 추가하여 `imenu-list-minor-mode` 가 활성화되지 않도록 할 수 있습니다.

예를 들어, Treemacs 버퍼에서 `imenu-list-minor-mode` 를 비활성화하는 함수를 정의하고, Treemacs 버퍼가 활성화될 때마다 이 함수를 호출하는 방법을 고려할 수 있습니다.

다음은 예시 코드입니다:

```elisp
(defun disable-imenu-list-in-treemacs ()
  (when (eq major-mode 'treemacs-mode)
    (imenu-list-minor-mode -1)))

(add-hook 'treemacs-mode-hook 'disable-imenu-list-in-treemacs)
```

이 코드는 Treemacs 모드가 활성화될 때마다 `imenu-list-minor-mode` 를 비활성화합니다.

Citations: [1] <https://www.spacemacs.org/layers/+tools/imenu-list/README.html> [2] <https://github.com/bmag/imenu-list/issues/21> [3] <https://github.com/Alexander-Miller/treemacs> [4] <https://rconybea.github.io/web/env/emacs-setup.html> [5] <https://github.com/Alexander-Miller/treemacs/issues/326>

@user 혹시 imenu-list와 유사한 패키지를 찾아봐줄래?

@assistant `imenu-list` 와 유사한 패키지로는 **helm-imenu** 나 **ivy-imenu** 가 있습니다. 이들은 Emacs의 imenu 기능을 기반으로 하여 다양한 방법으로 버퍼 내의 항목을 탐색할 수 있도록 도와줍니다.

-   **helm-imenu**: Helm 패키지를 사용하여 imenu 항목을 목록으로 표시하고, 검색 및 탐색 기능을 제공합니다.
-   **ivy-imenu**: Ivy 패키지를 사용하여 imenu 항목을 목록으로 표시하고, 검색 및 탐색 기능을 제공합니다.

이 두 패키지는 MELPA에서 설치할 수 있으며, 각자의 UI와 기능을 통해 사용자에게 편리한 탐색 환경을 제공합니다.

Citations: [1] <https://jblevins.org/log/markdown-imenu> [2] <https://github.com/bmag/imenu-list> [3] <https://github.com/emacs-tw/awesome-emacs> [4] <https://packages.guix.gnu.org/packages/emacs-imenu-list/0.9-1.b502223/>

@user imenu-list에서 현재 버퍼가 org-mode, prog-mode가 아닐 경우 업데이트 하지 않도록 하게 코드를 만들어줘

@assistant `imenu-list` 에서 현재 버퍼가 org-mode 나 prog-mode가 아닐 경우 업데이트하지 않도록 하려면, `imenu-list-minor-mode` 를 특정 모드에서만 활성화하도록 설정해야 합니다. 이를 위해 Emacs의 설정 파일에 다음 코드를 추가할 수 있습니다:

```elisp
(defun enable-imenu-list-if-supported-mode ()
  (when (or (eq major-mode 'org-mode)
            (eq major-mode 'prog-mode))
    (imenu-list-minor-mode 1)))

(add-hook 'after-change-major-mode-hook 'enable-imenu-list-if-supported-mode)
```

이 코드는 major mode가 변경될 때마다 현재 모드가 org-mode 나 prog-mode 인지 확인하고, 해당 모드일 경우에만 `imenu-list-minor-mode` 를 활성화합니다.

다만, 이 코드는 major mode가 변경될 때마다 실행되므로, 성능에 영향을 줄 수 있습니다. 따라서, 특정 모드에서만 `imenu-list-minor-mode` 를 활성화하는 것이 더 효율적일 수 있습니다:

```elisp
(add-hook 'org-mode-hook 'imenu-list-minor-mode)
(add-hook 'prog-mode-hook 'imenu-list-minor-mode)
```

이 코드는 org-mode와 prog-mode가 활성화될 때마다 `imenu-list-minor-mode` 를 자동으로 활성화합니다.

Citations: [1] <https://github.com/bmag/imenu-list> [2] <https://jblevins.org/log/markdown-imenu> [3] <https://wikemacs.org/wiki/Imenu> [4] <https://www.gnu.org/software/emacs/manual/html_node/emacs/Imenu.html> [5] <https://github.com/hlissner/doom-emacs/issues/1402>

@user 이맥스에서 imenu의 역할과 의미?

@assistant Emacs에서 **Imenu** 는 문서 내의 주요 정의(예: 함수, 변수, 섹션 등)를 목록으로 제공하여 사용자가 쉽게 해당 위치로 이동할 수 있도록 도와주는 기능입니다. 이는 주로 프로그래밍 언어 모드나 문서 형식 모드에서 유용하며, 사용자는 Imenu를 통해 버퍼 내의 특정 위치로 빠르게 이동할 수 있습니다[1][2][4].

Imenu는 각 모드에 맞게 사용자 정의할 수 있으며, 이를 통해 다양한 문서 형식에서 효율적으로 탐색할 수 있습니다. 또한, Imenu는 메뉴 바에 추가하거나 minibuffer를 통해 사용할 수 있습니다[2][4].

**Imenu-list** 는 Imenu의 기능을 그래픽적으로 개선한 패키지로, 버퍼 내의 항목을 목록으로 표시하여 사용자에게 더 직관적인 탐색 환경을 제공합니다[5].

Citations: [1] <http://www.gnu.org/s/emacs/manual/html_node/elisp/Imenu.html> [2] <https://wikemacs.org/wiki/Imenu> [3] <https://reduce-algebra.sourceforge.io/reduce-ide/reduce-ide/Imenu.html> [4] <https://www.gnu.org/software/emacs/manual/html_node/emacs/Imenu.html> [5] <https://www.youtube.com/watch?v=YM0TD8Eg9qg>

@user imenu-auto-rescan과 imenu-list-auto-update은 어떻게 다른가?

@assistant /imenu-auto-rescan\*과 /imenu-list-auto-update\*는 둘 다 Imenu 관련 기능의 자동 업데이트와 관련이 있지만, 그 목적과 범위가 다릅니다.

-   **imenu-auto-rescan**: 이 변수는 Imenu의 인덱스를 자동으로 업데이트하는 기능을 제어합니다. 즉, 버퍼의 내용이 변경될 때 Imenu의 인덱스를 최신 상태로 유지합니다. 이는 주로 Imenu의 기본 기능과 관련이 있습니다[1][2].

-   **imenu-list-auto-update**: 이 변수는 _imenu-list_ 패키지의 자동 업데이트와 관련이 있습니다. /imenu-list\*는 Imenu의 항목을 그래픽적으로 표시하는 패키지로, 이 변수는 버퍼의 변경 사항을 감지하여 /imenu-list\*의 항목을 자동으로 업데이트하는 기능을 제어합니다[3].

따라서, _imenu-auto-rescan\*은 Imenu의 기본 인덱스 업데이트를 담당하고, /imenu-list-auto-update\*는 Imenu의 항목을 그래픽적으로 표시하는 /imenu-list_ 패키지의 업데이트를 담당합니다.

Citations: [1] <http://www.nongnu.org/emacsdoc-fr/manuel/imenu.html> [2] <https://www.gnu.org/software/emacs/manual/html_node/emacs/Imenu.html> [3] <https://jblevins.org/log/markdown-imenu> [4] <https://github.com/abo-abo/swiper/issues/650> [5] <https://raw.githubusercontent.com/pierre-rouleau/pel/master/doc/pdf/menus.pdf>

@user outshine과 유사한 프로젝트를 찾아줘 <https://github.com/alphapapa/outshine/>

@assistant Outshine와 유사한 프로젝트로는 **Outline Mode** 와 **Org Mode** 가 있습니다. Outshine는 Outline Mode를 확장하여 Org Mode와 유사한 기능을 제공합니다. 그러나 Outshine와 정확히 동일한 기능을 제공하는 별도의 프로젝트는 검색 결과에서 찾을 수 없었습니다.

다만, **Outline Mode** 는 Emacs의 기본 기능으로, 문서의 구조를 관리하고 접기/펼치기 기능을 제공합니다. Org Mode는 문서 작성 및 관리에 강력한 기능을 제공하며, Outshine는 이러한 Org Mode의 기능을 다른 모드에서도 사용할 수 있도록 도와줍니다.

Outshine와 비슷한 기능을 원한다면, **Outline Mode** 와 **Org Mode** 를 활용하는 방법을 고려해 볼 수 있습니다.

Citations: [1] <https://github.com/alphapapa/outshine/> [5] <https://forums.freebsd.org/threads/emacsclient.93561/>

Citations: [1] <https://github.com/alphapapa/outshine> [2] <https://www.youtube.com/watch?v=QcRY_rsX0yY> [3] <https://www.const.no/init/> [4] <https://manueluberti.eu/posts/2021-11-27-vc/> [5] <https://forums.freebsd.org/threads/emacsclient.93561/>

@user imenu와 lsp가 연동 되는가?

@assistant `imenu` 와 `lsp` 는 연동될 수 있습니다. `lsp-ui-imenu` 라는 패키지는 Emacs의 `lsp-mode` 와 `imenu` 를 통합하여 사용할 수 있게 해줍니다. 이 패키지는 `imenu` 의 기능을 활용하여 `lsp` 의 코드 구조를 시각적으로 표시하고 탐색할 수 있도록 도와줍니다[1]. 따라서, `lsp-ui-imenu` 를 통해 `imenu` 와 `lsp` 를 연동하여 사용할 수 있습니다.

Citations: [1] <https://github.com/emacs-lsp/lsp-ui/blob/master/lsp-ui-imenu.el> [2] <https://skd03052.tistory.com/231> [3] <https://emacs-lsp.github.io/lsp-mode/page/settings/mode/> [4] <https://dreamcoding.tistory.com/66> [5] <https://github.com/emacs-lsp/lsp-mode/issues/381>

@user eglot과 imenu는 연동 되는가?

@assistant Eglot과 Imenu는 연동될 수 있습니다. Eglot은 언어 서버를 통해 버퍼의 인덱스를 생성하는 기능을 제공하며, 이는 Imenu의 기능과 유사합니다. Eglot은 `imenu-create-index-function` 을 사용하여 언어 서버의 분석 결과를 기반으로 인덱스를 생성합니다[3]. 따라서, Eglot이 활성화된 버퍼에서는 Imenu와 유사한 탐색 기능을 사용할 수 있습니다.

Eglot의 `eglot-imenu` 기능은 Imenu와 연동되어 사용될 수 있으며, 이는 버퍼 내의 프로그램 요소를 탐색하는 데 도움을 줍니다[2].

Citations: [1] <https://github.com/joaotavora/eglot/issues/212> [2] <https://www.gnu.org/software/emacs/manual/html_node/eglot/Eglot-Commands.html> [3] <http://www.gnu.org/software/emacs/manual/html_node/eglot/Eglot-Features.html> [4] <https://andreyor.st/posts/2023-09-09-migrating-from-lsp-mode-to-eglot/> [5] <https://github.com/joaotavora/eglot/issues/351>

@user

## outline 조직모드를 활용

-   [2025-02-27 Thu 19:17] 아니다.

### alphapapa/outshine

([“Alphapapa/Outshine Outline-Mode” 2025](https://notes.junghanacs.com/notes/20250227T143549#citeproc_bib_item_1))

-   Porter, Adam
-   Org-mode for non-Org buffers
-   2025

### localauthor/org-side-tree

([“Localauthor/Org-Side-Tree Outline-Mode” 2025](https://notes.junghanacs.com/notes/20250227T143549#citeproc_bib_item_4))

-   

-   Rosson, Grant
-   Navigate Org-mode outlines in Emacs via side window
-   2025

## TIL Imenu - 메뉴바에 넣는 것 마우스용

([Charles Choi n.d.](https://notes.junghanacs.com/notes/20250227T143549#citeproc_bib_item_2))

-   Charles Choi
-   Recently I learned that Imenu is a thing. While likely old-hat to those who already know, nevertheless this post will endeavor to 1) restate Imenu's profound usefulness, 2) argue that Imenu is...
-
