nushell / reedline

A feature-rich line editor - powering Nushell
https://docs.rs/reedline/
MIT License
545 stars 150 forks source link

Highlight arbitrary matches #808

Open qfel opened 3 months ago

qfel commented 3 months ago

I'm looking into adding fuzzy history search in nushell, and one thing that it really needs is the ability to highlight the matched part of each item.

Columnar menu already supports something a bit familiar - highlighting the matched prefix via selected_match_style. But for fuzzy matching, we need to be able to highlight arbitrary parts of an item, eg.

query: oa match: foobar

So I think this would need a new field in the Suggestion struct, describing which characters are matched.

The most straightforward/natural way for one could be:

/// An increasing list of char (not byte!) indices describing which characters from the `value` field are considered matched.
matches: Option<Vec<usize>>

Any thoughts on that? I imagine the "increasing" part can be questionable, API-wise, though makes the implementation simpler and in practice the user is likely to have it already sorted.

I'm happy to send s PR.

ysthakur commented 3 months ago

We're actually discussing how to do this right now, feel free to join in! https://github.com/nushell/reedline/pull/798

qfel commented 3 months ago

We're actually discussing how to do this right now, feel free to join in! #798

Ah, looked at other issues but didn't think to look over PRs. Should I close it or let it be closed once the PR is merged?

ysthakur commented 3 months ago

You can leave this issue up. PRs may get closed, so this issue would help us know the bug wasn't fixed.