Commit graph

25 commits

Author SHA1 Message Date
LoricAndre 987d2a5ca7
feat: add multiline item rendering (#999)
* feat: add multiline item rendering

* chore: generate completions & manpage

* chore: use newline as default for multiline when read0 is set

* chore: generate completions & manpage

* chore: add `highlight-line'

* chore: generate completions & manpage

* feat: use multiline in history widgets

* feat: better snap tests

* feat(ci): show snap failures

* fix(ci): cross platform tests

---------

Co-authored-by: Skim bot <skim-bot@skim-rs.github.io>
2026-03-30 13:57:09 +02:00
LoricAndre 9d12e9d420
feat: windows support (#1010)
* wip: windows support

* feat: windows support

* feat: add windows target to CI

* chore: generate completions & manpage

* Update src/util.rs

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* chore: cleanup & doc

* chore: generate completions & manpage

* chore: generate dist

* fix: reduplicate default test

* chore: regate tmux

* chore: remove useless test-utils feature

* fix(windows): ignore dirs in default_command

* docs: update shell docs for windows

* chore: generate completions & manpage

* chore(justfile): do not ignore failed tests

* fix: upload correct junit after profile change

* fix: always execute exit commands

* fix: windows-specific ctrl-c handling

* chore: misc docs & other updates

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* chore: generate completions & manpage

* chore: include license in MSI installer

---------

Co-authored-by: Skim bot <skim-bot@skim-rs.github.io>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Your Name <you@example.com>
2026-03-29 21:46:42 +00:00
LoricAndre ab514a54c9
feat!: internally compute indexes at match time (removes get/set_index) (#1001)
* chore: remove skim::Item run_items wrapper

* fix: properly trigger re-render on custom previews

* feat: add AppendItems event

* feat!: internally compute indexes at match time (removes get/set_index)

* chore: generate completions & manpage

* chore: better benchmarks

---------

Co-authored-by: Skim bot <skim-bot@skim-rs.github.io>
2026-03-10 14:12:10 +01:00
Loric ANDRE 65ba8cffaa feat: event-driven re-render (#949) 2026-02-16 11:05:33 +01:00
kimono-koans ad91558749
feat: use a separate thread pool for Matcher runs (#961)
* 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>
2026-02-15 17:34:46 +01:00
kimono-koans 5d9743f198
feat: further reduce DefaultSkimItem size (#967)
* Initial commit

* Cleanup

* Prevent some double allocation behavior

* User the proper conversion method

* Further attempt to avoid alloc

* Actually avoid alloc

* Cleanup

* Remove an unnecessary alloc

* Cleanup

* Avoid another alloc

---------

Co-authored-by: LoricAndre <57358788+LoricAndre@users.noreply.github.com>
2026-02-13 15:18:26 +01:00
LoricAndre de7eab7619
feat(cli): add SKIM_OPTIONS_FILE (#972)
* feat(cli): add SKIM_OPTIONS_FILE

* chore: generate completions & manpage

---------

Co-authored-by: Skim bot <skim-bot@skim-rs.github.io>
2026-02-13 09:24:05 +01:00
Loric ANDRE 4c12048762 fix: restart_matcher race condition (closes #970) 2026-02-12 15:08:37 +01:00
LoricAndre e9fb1877c0
feat(lib): add fine-grained control over skim's event loop (#968)
* feat(lib): add fine-grained control over skim's event loop

* fix: do not panic on reload

* fix: cleaner handling of reload
2026-02-12 11:57:02 +01:00
Loric ANDRE d11e627ba6 feat!: use smarter setters, remove the need for Some(...) and String::from() in setters 2026-02-11 18:18:35 +01:00
dependabot[bot] d48f3f5e32
chore(deps): bump rand from 0.9.2 to 0.10.0 (#958)
Bumps [rand](https://github.com/rust-random/rand) from 0.9.2 to 0.10.0.
- [Release notes](https://github.com/rust-random/rand/releases)
- [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-random/rand/compare/rand_core-0.9.2...0.10.0)

---
updated-dependencies:
- dependency-name: rand
  dependency-version: 0.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 21:51:42 +00:00
Loric ANDRE fdd93644b4 chore: test matchers 2026-02-09 23:31:43 +01:00
LoricAndre a08f6ac9b3
feat!: interactive pty preview & concurrency optimizations (#952)
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>
2026-02-09 21:43:04 +00:00
Loric ANDRE d45f4c41fe fix: always make ctrl-d abort (closes #941) 2026-01-29 18:23:10 +01:00
phanium a99cae3ca2
fix: clear screen when not in fullscreenon bash & fish (#936)
* fix: clear screen when not in fullscreen

`SKIM_DEFAULT_OPTIONS= sk --height=90%` don't clear screen on exit.

It don't use alt screen so we clear the screen manually on exit.

* fixup! fix: clear screen when not in fullscreen

* test: use explicit escape key and move to platform-specific

---------

Co-authored-by: Loric ANDRE <loric.andre@pm.me>
2026-01-27 09:51:20 +00:00
Loric ANDRE 6a6fea3e3a fix: header and header-lines order in reverse layout 2026-01-25 21:40:30 +01:00
Loric ANDRE 94c4bd51fe fix: correct cursor position when using reverse and border (closes #928) 2026-01-25 19:25:42 +01:00
LoricAndre ec0658a9d4
feat: add borders to all widgets (#930) 2026-01-25 10:36:28 +01:00
LoricAndre 3c5b2d4209
fix: correctly expand {+} to current when no items are selected (cl… (#913)
* 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>
2026-01-22 11:28:58 +00:00
LoricAndre 79672e348f
feat: add set-query action to update the input (closes #657) (#907)
* feat: add `set-query` action to update the input (closes #657)

* chore: generate completions & manpage

* test: add set_query tests

---------

Co-authored-by: Skim bot <skim-bot@skim-rs.github.io>
2026-01-21 22:42:26 +00:00
LoricAndre 6d0c310bea
test: use insta for applicable integration tests, making them cross-p… (#903)
* 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
2026-01-21 15:41:20 +01:00
LoricAndre 3782ae85e1
fix: fix listen flag on macos (#888)
* test: add vanilla test

* test: add vanilla test

* test: add vanilla test

* chore: better error

* fix: @dbg never times out

* chore: increase timeout

* chore: increase timeout

* fix: allow listen tests to retry
2026-01-16 15:58:07 +01:00
Loric ANDRE 1bf7b5266a test: add tests for listen flag 2026-01-16 10:01:28 +01:00
LoricAndre 904ec2fa3e
chore: remove unneeded deps (#884)
* chore: remove unneeded deps

* chore: generate completions & manpage

* chore: remove unneeded deps

* chore: fix PR template tests link

---------

Co-authored-by: Loric André <loric.andre@noreply.me>
Co-authored-by: Skim bot <skim-bot@skim-rs.github.io>
2026-01-13 12:00:44 +01:00
LoricAndre c364c5f128
chore: remove workspace (#883)
* chore: remove workspace

* chore: regen dist config

* fix: readme path

* chore: extra-artifacts as files

* chore: generate dist CI

* chore: prepare for prerelease

* chore: switch to include + generate-files

* chore: use run step for generate-files

---------

Co-authored-by: Loric André <loric.andre@noreply.me>
2026-01-13 11:34:10 +01:00