13 个版本 (8 个破坏性版本)
0.10.0 | 2024年7月10日 |
---|---|
0.8.1 | 2024年2月22日 |
0.7.0 | 2024年2月4日 |
0.6.0 | 2023年7月24日 |
0.1.0 | 2019年5月6日 |
#564 在 GUI
每月445 次下载
用于 2 crates
19KB
296 行
search-provider
Rust 包装的 GNOME Shell 搜索提供者 API
lib.rs
:
该包旨在提供一个简单的包装器,用于围绕 GNOME Shell 搜索提供者 DBus 接口。
如何使用
- 注册新的搜索提供者
- 为包含您的应用程序的结构实现
SearchProviderImpl
特性 - 应用程序安装后,在 GNOME 设置 -> 搜索中启用它。
use search_provider::{ResultID, ResultMeta, SearchProviderImpl};
use std::collections::HashMap;
#[derive(Debug)]
struct Application {
results: HashMap<String, String>,
}
impl SearchProviderImpl for Application {
fn activate_result(&self, identifier: ResultID, terms: &[String], timestamp: u32) {
let result = self.results.get(&identifier);
println!(
"activating result {:#?} identified by {}",
result, identifier
);
}
fn initial_result_set(&self, terms: &[String]) -> Vec<ResultID> {
// Here do your search logic
if terms.contains(&"some_value".to_owned()) {
vec!["some_key".to_owned()]
} else {
vec![]
}
}
fn result_metas(&self, identifiers: &[ResultID]) -> Vec<ResultMeta> {
self.results
.iter()
.map(|(identifier, value)| {
ResultMeta::builder(identifier.to_owned(), "Some name")
.description("Some description of the current identifier")
.build()
})
.collect::<Vec<_>>()
}
}
- 创建
SearchProvider
的实例
use search_provider::SearchProvider;
use std::collections::HashMap;
async fn main_entry() -> zbus::Result<()> {
let mut results = HashMap::new();
results.insert("some_key".to_string(), "some_value".to_string());
let app = Application { results };
let provider = SearchProvider::new(
app,
"org.gnome.design.IconLibrary.SearchProvider",
"/org/gnome/design/IconLibrary/SearchProvider",
)
.await?;
Ok(())
}
依赖关系
~6–19MB
~279K SLoC