Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ For more details or to discuss releases, please visit the

## [Unreleased]

## [0.9.2] - 2026-07-15

- TUI: an active search or parametric filter now stays applied after copying,
deleting, adding, or editing a part. The list previously reverted to showing
every row until the filter was re-entered.

## [0.9.1] - 2026-07-15

- TUI: the parts list now scrolls a full page at a time with Ctrl-F (forward)
Expand Down
2 changes: 2 additions & 0 deletions roadmap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- Select symbols and footprints from KiCad libraries
- Show error if symbol/footprint cannot be found
23 changes: 21 additions & 2 deletions tui.go
Original file line number Diff line number Diff line change
Expand Up @@ -431,10 +431,29 @@ func (m *modelNew) updateTableForSelectedFile() {
m.isEditable = true
}

m.filteredRows = m.allRows
m.rowToDataIdx = nil
m.mode = modeNormal
m.error = ""
m.reapplyActiveFilter()
}

// reapplyActiveFilter re-runs whichever filter (search or parametric) is
// currently active against the freshly rebuilt allRows. It keeps the active
// filter in effect after edits, copies, and deletes, which rebuild the table.
// With no active filter, the full row set is shown.
func (m *modelNew) reapplyActiveFilter() {
if m.searchInput.Value() != "" {
m.applySearchFilter(m.searchInput.Value())
return
}
for _, pi := range m.paramInputs {
if pi.Value() != "" {
m.applyParametricFilter()
return
}
}
m.filteredRows = m.allRows
m.rowToDataIdx = nil
m.table.SetRows(m.allRows)
}

// getSelectedCSVFile returns the CSVFile for the currently selected file, or nil.
Expand Down
Loading