Version Check / check-version (pull_request) Successful in 10s
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
67 lines
1.5 KiB
TOML
67 lines
1.5 KiB
TOML
# mould Configuration Example
|
|
# Place this file at ~/.config/mould/config.toml (Linux/macOS)
|
|
# or %AppData%\mould\config.toml (Windows)
|
|
|
|
[theme]
|
|
# If true, skip rendering the background block to let the terminal's transparency show.
|
|
transparent = false
|
|
|
|
# Colors are specified in hex format ("#RRGGBB").
|
|
# Default values follow the Semantic Catppuccin Mocha palette.
|
|
|
|
bg_normal = "#1e1e2e"
|
|
bg_highlight = "#89b4fa"
|
|
bg_active = "#a6e3a1"
|
|
bg_search = "#cba6f7"
|
|
fg_normal = "#cdd6f4"
|
|
fg_dimmed = "#6c7086"
|
|
fg_highlight = "#1e1e2e"
|
|
fg_warning = "#f38ba8"
|
|
fg_modified = "#fab387"
|
|
fg_accent = "#b4befe"
|
|
border_normal = "#45475a"
|
|
border_active = "#a6e3a1"
|
|
tree_depth_1 = "#b4befe"
|
|
tree_depth_2 = "#cba6f7"
|
|
tree_depth_3 = "#89b4fa"
|
|
tree_depth_4 = "#fab387"
|
|
|
|
[keybinds]
|
|
# Keybindings for navigation and application control.
|
|
#
|
|
# A binding may list alternatives separated by commas ("<Tab>,za").
|
|
# Named keys are written in angle brackets: <Space>, <Tab>.
|
|
# A key bound to two actions is reported on startup instead of silently
|
|
# shadowing one of them.
|
|
down = "j"
|
|
up = "k"
|
|
edit = "i"
|
|
edit_append = "a"
|
|
edit_substitute = "s,S"
|
|
save = ":w"
|
|
quit = ":q"
|
|
quit_key = "q"
|
|
command = ":"
|
|
search = "/"
|
|
next_match = "n"
|
|
previous_match = "N"
|
|
jump_top = "gg"
|
|
jump_bottom = "G"
|
|
append_item = "o"
|
|
prepend_item = "O"
|
|
delete_item = "dd"
|
|
undo = "u"
|
|
redo = "U"
|
|
undo_branch_prev = "g-"
|
|
undo_branch_next = "g+"
|
|
rename = "r"
|
|
append_group = "alt+o"
|
|
prepend_group = "alt+O"
|
|
toggle_group = "t"
|
|
add_missing = "<Space>"
|
|
accept_all = "A"
|
|
toggle_fold = "<Tab>,za"
|
|
fold_all = "zM"
|
|
unfold_all = "zR"
|
|
help = "?"
|