A guide to using magit-section for building collapsible, hierarchical buffer UIs in Emacs.
View on GitHubhugoduncan/library-skills
emacs-libraries
January 23, 2026
Select agents to install to:
npx add-skill https://github.com/hugoduncan/library-skills/blob/main/plugins/emacs-libraries/skills/magit-section/SKILL.md -a claude-code --skill magit-sectionInstallation paths:
.claude/skills/magit-section/# magit-section: Collapsible Section-Based UIs magit-section is Emacs's premier library for creating interactive, hierarchical buffer interfaces with collapsible sections. Originally extracted from Magit, it provides the foundation for building information-dense UIs that users can navigate and explore efficiently. ## Overview magit-section enables creation of buffers with tree-like, collapsible content organized into sections. Each section can contain nested child sections, custom keybindings, associated data, and responsive highlighting. **Key Characteristics:** - Hierarchical collapsible sections with visibility control - Section-specific keymaps and actions - Built-in navigation commands - Visibility caching across buffer refreshes - Mouse and keyboard interaction - Integrated with Emacs region selection - Requires Emacs 28.1+ **Version:** 4.2.0+ (January 2025) **Repository:** https://github.com/magit/magit **License:** GPL-3.0+ ## Core Concepts ### Section Object Sections are EIEIO objects with these slots: - `type` - Symbol identifying section kind (e.g., `file`, `commit`, `hunk`) - `value` - Associated data (filename, commit SHA, etc.) - `start` - Buffer position where section begins (includes heading) - `content` - Buffer position where body content starts - `end` - Buffer position where section ends - `hidden` - Visibility state (nil=visible, non-nil=hidden) - `children` - List of child sections - `parent` - Parent section reference - `keymap` - Section-specific key bindings - `washer` - Function for deferred content generation ### Buffer Structure Every magit-section buffer requires a single root section that spans the entire buffer. Sections form a tree hierarchy with proper nesting. ### Visibility States Sections can be: - **Fully visible** - Heading and all content shown - **Hidden** - Only heading visible, content collapsed - **Heading-only** - Nested sections show only headings ## API Reference ### Creating Sections #### magit-insert-se