The headline flow — fill a config from its template — did not work. Three
bugs, each individually enough to make the tool feel unfinished:
add_missing was unreachable. find_binding returned the first match in
a linear array and edit_append was also bound to a, 17 entries earlier.
Bindings now resolve through one table built from the config, and KeybindsConfig::conflicts() reports any key bound twice instead of
letting one silently shadow the other. add_missing moves to <Space>,
with A to take every missing default at once.
Item status was ignored on write. Every writer fell back to template_value, so "(missing)" keys landed in the output regardless and
saving was close to a copy. Unaccepted entries are now omitted.
Parse errors were swallowed, then the good file was overwritten. A
malformed target opened as an empty editor and :w truncated it. Parse
failures are now fatal, reported with context, before the TUI starts.
Also:
Split "differs from the template" (ItemStatus::Overridden) from "you
edited this" (ConfigItem::dirty). A real config differs from its example
on nearly every line, so the old Modified flag painted the whole list
orange and carried no signal.
Splice template-only entries in at their natural position instead of
appending them, so a missing nested key no longer strands itself at the
bottom of the tree at depth 3.
Preserve .env comments and blank lines across a save.
Header naming the output file and the template it is compared against,
plus missing/changed counts. Previously nothing on screen said which
files were in play or where :w would write.
? opens a two-column keybinding reference built from the user's own
config, scrollable on short terminals. The status bar drops to a few
contextual hints; the old one joined 11+ hints into an unwrapped line
that truncated at 80 columns.
Foldable groups, which the + prefix had always implied.
Search covers values as well as keys, reports match n/m, and Esc
restores the pre-search cursor.
Quitting with unsaved changes is refused; added :q!, :x, :w <path>.
Status messages expire after 4s instead of permanently replacing hints.
Cancelling a rename on a just-created item removes it again.
Editing a Number field with text demotes the type instead of failing
obscurely at write time.
Undo-tree branches are reachable via g-/g+ and reported on undo.
Poll instead of blocking, so resizes repaint; drop the unused mouse
capture that was costing terminal text selection for nothing.
--format accepts xml, ini and properties, which were already supported.
The headline flow — fill a config from its template — did not work. Three
bugs, each individually enough to make the tool feel unfinished:
- `add_missing` was unreachable. `find_binding` returned the first match in
a linear array and `edit_append` was also bound to `a`, 17 entries earlier.
Bindings now resolve through one table built from the config, and
`KeybindsConfig::conflicts()` reports any key bound twice instead of
letting one silently shadow the other. `add_missing` moves to `<Space>`,
with `A` to take every missing default at once.
- Item status was ignored on write. Every writer fell back to
`template_value`, so "(missing)" keys landed in the output regardless and
saving was close to a copy. Unaccepted entries are now omitted.
- Parse errors were swallowed, then the good file was overwritten. A
malformed target opened as an empty editor and `:w` truncated it. Parse
failures are now fatal, reported with context, before the TUI starts.
Also:
- Split "differs from the template" (ItemStatus::Overridden) from "you
edited this" (ConfigItem::dirty). A real config differs from its example
on nearly every line, so the old Modified flag painted the whole list
orange and carried no signal.
- Splice template-only entries in at their natural position instead of
appending them, so a missing nested key no longer strands itself at the
bottom of the tree at depth 3.
- Preserve .env comments and blank lines across a save.
- Header naming the output file and the template it is compared against,
plus missing/changed counts. Previously nothing on screen said which
files were in play or where `:w` would write.
- `?` opens a two-column keybinding reference built from the user's own
config, scrollable on short terminals. The status bar drops to a few
contextual hints; the old one joined 11+ hints into an unwrapped line
that truncated at 80 columns.
- Foldable groups, which the `+ ` prefix had always implied.
- Search covers values as well as keys, reports `match n/m`, and `Esc`
restores the pre-search cursor.
- Quitting with unsaved changes is refused; added `:q!`, `:x`, `:w <path>`.
- Status messages expire after 4s instead of permanently replacing hints.
- Cancelling a rename on a just-created item removes it again.
- Editing a Number field with text demotes the type instead of failing
obscurely at write time.
- Undo-tree branches are reachable via `g-`/`g+` and reported on undo.
- Poll instead of blocking, so resizes repaint; drop the unused mouse
capture that was costing terminal text selection for nothing.
- `--format` accepts xml, ini and properties, which were already supported.
36 tests, up from 13.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C5mrbEFmwv2A4cdzbcSiS1
The headline flow — fill a config from its template — did not work. Three
bugs, each individually enough to make the tool feel unfinished:
- `add_missing` was unreachable. `find_binding` returned the first match in
a linear array and `edit_append` was also bound to `a`, 17 entries earlier.
Bindings now resolve through one table built from the config, and
`KeybindsConfig::conflicts()` reports any key bound twice instead of
letting one silently shadow the other. `add_missing` moves to `<Space>`,
with `A` to take every missing default at once.
- Item status was ignored on write. Every writer fell back to
`template_value`, so "(missing)" keys landed in the output regardless and
saving was close to a copy. Unaccepted entries are now omitted.
- Parse errors were swallowed, then the good file was overwritten. A
malformed target opened as an empty editor and `:w` truncated it. Parse
failures are now fatal, reported with context, before the TUI starts.
Also:
- Split "differs from the template" (ItemStatus::Overridden) from "you
edited this" (ConfigItem::dirty). A real config differs from its example
on nearly every line, so the old Modified flag painted the whole list
orange and carried no signal.
- Splice template-only entries in at their natural position instead of
appending them, so a missing nested key no longer strands itself at the
bottom of the tree at depth 3.
- Preserve .env comments and blank lines across a save.
- Header naming the output file and the template it is compared against,
plus missing/changed counts. Previously nothing on screen said which
files were in play or where `:w` would write.
- `?` opens a two-column keybinding reference built from the user's own
config, scrollable on short terminals. The status bar drops to a few
contextual hints; the old one joined 11+ hints into an unwrapped line
that truncated at 80 columns.
- Foldable groups, which the `+ ` prefix had always implied.
- Search covers values as well as keys, reports `match n/m`, and `Esc`
restores the pre-search cursor.
- Quitting with unsaved changes is refused; added `:q!`, `:x`, `:w <path>`.
- Status messages expire after 4s instead of permanently replacing hints.
- Cancelling a rename on a just-created item removes it again.
- Editing a Number field with text demotes the type instead of failing
obscurely at write time.
- Undo-tree branches are reachable via `g-`/`g+` and reported on undo.
- Poll instead of blocking, so resizes repaint; drop the unused mouse
capture that was costing terminal text selection for nothing.
- `--format` accepts xml, ini and properties, which were already supported.
36 tests, up from 13.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C5mrbEFmwv2A4cdzbcSiS1
nvrl
merged commit 4c59e6edaa into main2026-09-05 05:05:59 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The headline flow — fill a config from its template — did not work. Three
bugs, each individually enough to make the tool feel unfinished:
add_missingwas unreachable.find_bindingreturned the first match ina linear array and
edit_appendwas also bound toa, 17 entries earlier.Bindings now resolve through one table built from the config, and
KeybindsConfig::conflicts()reports any key bound twice instead ofletting one silently shadow the other.
add_missingmoves to<Space>,with
Ato take every missing default at once.template_value, so "(missing)" keys landed in the output regardless andsaving was close to a copy. Unaccepted entries are now omitted.
malformed target opened as an empty editor and
:wtruncated it. Parsefailures are now fatal, reported with context, before the TUI starts.
Also:
edited this" (ConfigItem::dirty). A real config differs from its example
on nearly every line, so the old Modified flag painted the whole list
orange and carried no signal.
appending them, so a missing nested key no longer strands itself at the
bottom of the tree at depth 3.
plus missing/changed counts. Previously nothing on screen said which
files were in play or where
:wwould write.?opens a two-column keybinding reference built from the user's ownconfig, scrollable on short terminals. The status bar drops to a few
contextual hints; the old one joined 11+ hints into an unwrapped line
that truncated at 80 columns.
+prefix had always implied.match n/m, andEscrestores the pre-search cursor.
:q!,:x,:w <path>.obscurely at write time.
g-/g+and reported on undo.capture that was costing terminal text selection for nothing.
--formataccepts xml, ini and properties, which were already supported.36 tests, up from 13.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01C5mrbEFmwv2A4cdzbcSiS1