fix(cosmic_toplevel): require higher score & match individual title words

This commit is contained in:
Ashley Wulber 2024-07-18 18:11:37 -04:00 • committed by Michael Murphy
parent 172532056b
commit e44d6cd0bd

View file

@ -18,6 +18,7 @@ use pop_launcher::{
Request, Request,
}; };
use std::borrow::Cow; use std::borrow::Cow;
use std::iter;
use tokio::io::{AsyncWrite, AsyncWriteExt}; use tokio::io::{AsyncWrite, AsyncWriteExt};
use self::toplevel_handler::{toplevel_handler, ToplevelAction, ToplevelEvent}; use self::toplevel_handler::{toplevel_handler, ToplevelAction, ToplevelEvent};
@ -169,20 +170,23 @@ impl<W: AsyncWrite + Unpin> App<W> {
fde::matching::MatchAppIdOptions::default(), fde::matching::MatchAppIdOptions::default(),
) )
} else { } else {
let lowercase_title = info.title.to_lowercase();
let window_words = lowercase_title
.split_whitespace()
.chain(iter::once(info.app_id.as_str()))
.chain(iter::once(info.title.as_str()))
.collect::<Vec<_>>();
fde::matching::get_best_match( fde::matching::get_best_match(
&[&info.app_id, &info.title], &window_words,
&self.desktop_entries, &self.desktop_entries,
fde::matching::MatchAppIdOptions::default(), fde::matching::MatchAppIdOptions::default(),
) )
.and_then(|de| { .and_then(|de| {
let score = fde::matching::get_entry_score( let score =
&query, fde::matching::get_entry_score(&query, de, &self.locales, &window_words);
de,
&self.locales,
&[&info.app_id, &info.title],
);
if score > 0.6 { if score > 0.8 {
Some(de) Some(de)
} else { } else {
None None
@ -201,7 +205,6 @@ impl<W: AsyncWrite + Unpin> App<W> {
// XXX protocol id may be re-used later // XXX protocol id may be re-used later
id: handle.id().protocol_id(), id: handle.id().protocol_id(),
window: Some((0, handle.id().clone().protocol_id())), window: Some((0, handle.id().clone().protocol_id())),
// XXX: why this is inversed for this plugin ????
description: info.title.clone(), description: info.title.clone(),
name: get_description(de, &self.locales), name: get_description(de, &self.locales),
icon: Some(IconSource::Name(icon_name)), icon: Some(IconSource::Name(icon_name)),