Avoid leaving symbols leftovers on the screen during query fuzzy search

In case of multi-line queries in the history, skim may leave some
symbols on the screen, which looks icky.

Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
This commit is contained in:
Azat Khuzhin 2023-02-02 19:29:03 +01:00
parent 3d6883dd9c
commit 780c8ea586

View File

@ -11,11 +11,26 @@ mod ffi {
struct Item { struct Item {
text: String, text: String,
orig_text: String,
}
impl Item {
fn new(text: String) -> Self {
return Self{
// Text that will be shown should not contains new lines since in this case skim may
// live some symbols on the screen, and this looks odd.
text: text.replace("\n", " "),
orig_text: text,
};
}
} }
impl SkimItem for Item { impl SkimItem for Item {
fn text(&self) -> Cow<str> { fn text(&self) -> Cow<str> {
return Cow::Borrowed(&self.text); return Cow::Borrowed(&self.text);
} }
fn output(&self) -> Cow<str> {
return Cow::Borrowed(&self.orig_text);
}
} }
fn skim(prefix: &CxxString, words: &CxxVector<CxxString>) -> Result<String, String> { fn skim(prefix: &CxxString, words: &CxxVector<CxxString>) -> Result<String, String> {
@ -34,7 +49,7 @@ fn skim(prefix: &CxxString, words: &CxxVector<CxxString>) -> Result<String, Stri
let (tx, rx): (SkimItemSender, SkimItemReceiver) = unbounded(); let (tx, rx): (SkimItemSender, SkimItemReceiver) = unbounded();
for word in words { for word in words {
tx.send(Arc::new(Item{ text: word.to_string() })).unwrap(); tx.send(Arc::new(Item::new(word.to_string()))).unwrap();
} }
// so that skim could know when to stop waiting for more items. // so that skim could know when to stop waiting for more items.
drop(tx); drop(tx);