* Initial commit
* Disable Matcher when query is empty
* Revert
* Cleanup
* Use par_chunks for faster search
* Cleanup
* Skip updating atomic on every iter
* Item index unnecessary?
* Cleanup
* Build thread pool at App level
* Initial commit
* Disable Matcher when query is empty
* Revert
* Cleanup
* Use par_chunks for faster search
* Cleanup
* Skip updating atomic on every iter
* Item index unnecessary?
* Cleanup
* Build thread pool at App level
* Make suggested improvements
* chore: cleanup after rebase
* refactor: rewrite insta test harness to use fine-grained Skim:: methods
Split `impl Skim` into a generic `impl<Backend> Skim<Backend>` block so
that `Skim::init()`, `Skim::start()`, `Skim::tick()`, etc. work with
any backend, not just the default CrosstermBackend.
New public API on Skim<B>:
- `init_tui_with(tui)` – inject a caller-provided TUI (e.g. TestBackend)
- `app()` / `app_mut()` – access the application state
- `tui_ref()` / `tui_mut()` – access the TUI
- `app_and_tui()` – simultaneous mutable access to both (avoids borrow
conflicts in render and handle_event calls)
- `final_event()` – inspect the quit event
TestHarness now wraps `Skim<TestBackend>` and initializes via
`Skim::init()` + `Skim::init_tui_with()`, sharing the production
init path (theme, reader, command expansion) instead of duplicating it.
https://claude.ai/code/session_016PtHKc9YVEpHftDxG5Nger
* chore: make insta harness more realistic
* Cleanup merge errors
* Remove duplicate check
* Cleanup
* No need to clone twice
* fix: fix thread pool race condition
---------
Co-authored-by: Loric ANDRE <loric.andre@pm.me>
Co-authored-by: Claude <noreply@anthropic.com>
This PR has grown beyond its initial scope due to me over-optimizing everything, but it leads to:
Paving the way for future actually interactive previews
Consistently better performance than fzf in our bench thanks to thread and concurrency optimizations as well as the use of kanal for the items channels
Given the scope, I'm marking this as breaking because:
setting wrap in the preview window layout disables the pty since we don't want to manipulate the raw buffer to word-wrap it manually
kanal channels work slightly differently and might break library usage, even though switching to them did not require any modifications of the examples so it's unlikely that users will see anything break
* fix: force cwd for preview
* fix: correctly set cwd & kill pty child in the right order
* fix: use std threads & reopen new pty for each preview
* feat: use tui-term for displaying
* feat: scroll in pty
* fix: make nested skim previews work
* fix: clippy mistake
* feat: reactive preview triggering
* chore: generate completions & manpage
* chore: optimizations & thread cleanup
* chore: use kanal for faster channels
* fix: tests
* fix: only send items if the matcher hasn't been killed in the meantime (#947)
* tests: add coverage
* tests: fix bin path with coverage
* tests: upload tests to codecov
* chore: make pty opt-in through preview-window
* chore: generate completions & manpage
---------
Co-authored-by: Skim bot <skim-bot@skim-rs.github.io>
* fix: correctly expand `{+}` to current when no items are selected (closes#910)
* chore: generate completions & manpage
* test: add printf_plus unit tests
---------
Co-authored-by: Skim bot <skim-bot@skim-rs.github.io>
* test: use insta for applicable integration tests, making them cross-platform
* fix: remove @cmd from insta tests
* fix: remove @cmd from insta tests
* fix: use printf instead of echo