Dev_arch

Nvim :help pages, generated from source using the tree-sitter-vimdoc parser.


How to develop Nvim, explanation of modules and subsystems
The top of each major module has (or should have) an overview in a comment at the top of its file. The purpose of this document is to give:
1. an overview of how it all fits together 2. how-to guides for common tasks such as:
deprecating public functions
adding a new public (API) function
adding a new public (UI) event 3. TODO: move src/nvim/README.md into this doc.

Data structures

Use kvec.h for most lists. When you absolutely need a linked list, use lib/queue_defs.h which defines an "intrusive" linked list.

UI events

The source files most directly involved with UI events are: 1. src/nvim/ui.*: calls handler functions of registered UI structs (independent from msgpack-rpc) 2. src/nvim/api/ui.*: forwards messages over msgpack-rpc to remote UIs.
UI events are defined in src/nvim/api/ui_events.in.h , this file is not compiled directly, rather it parsed by src/nvim/generators/gen_api_ui_events.lua which autogenerates wrapper functions used by the source files above. It also generates metadata accessible as api_info().ui_events.
See commit d3a8e9217f39c59dd7762bd22a76b8bd03ca85ff for an example of adding a new UI event.
UI events are deferred to UIs, which implies a deepcopy of the UI event data.
Remember to bump NVIM_API_LEVEL if it wasn't already during this development cycle.
Main
Commands index
Quick reference