ADR-0049: A line-number gutter drawn from the text widget's geometry
- Status: Accepted
- Date: 2026-08-19
- Deciders: jka
- Decision: D49
Context
A code editor needs line numbers. The usual Tk approach is a second text widget beside the editor, which cannot stay aligned when long lines wrap.
Decision
Each editor group has a line-number gutter, on by default and toggled with View ▸ Line Numbers (persisted).
- The gutter is an unfocusable canvas, not a text widget.
- Numbers are painted at the y position the text widget reports for the first
display row of each logical line (
dlineinfo), so a wrapped line shows its number once, at its top, and the two cannot drift. - Repaints are triggered by the text widget's scroll command and by resize, coalesced into one idle pass.
- The width follows the digit count of the last line, with a minimum of two digits.
- Colours use the
gutter.fgandeditor.bgroles. Mouse wheel events over the gutter scroll the text.
Consequences
- Line numbers stay correct under wrapping.
- Painted numbers need a mapped window, so headless tests can check the width and labelling logic but not the painted glyphs.
- Clicking a number (ADR-0061) and relative numbers (ADR-0071) were added later on the same gutter. Line numbers in the compare panes are not provided.