feat(shortcuts): search by key bindings
This commit is contained in:
parent
7df9700a94
commit
908432d32b
4 changed files with 47 additions and 74 deletions
73
Cargo.lock
generated
73
Cargo.lock
generated
|
|
@ -1516,7 +1516,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-config"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1fce5df160f595d1b1e5a8e2bb2a24775419f82d"
|
||||
source = "git+https://github.com/pop-os/libcosmic#a55ed23ba8d8f8f72599daf0824074986057bdff"
|
||||
dependencies = [
|
||||
"atomicwrites",
|
||||
"cosmic-config-derive",
|
||||
|
|
@ -1538,7 +1538,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-config-derive"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1fce5df160f595d1b1e5a8e2bb2a24775419f82d"
|
||||
source = "git+https://github.com/pop-os/libcosmic#a55ed23ba8d8f8f72599daf0824074986057bdff"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
|
|
@ -1740,7 +1740,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-settings-config"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/cosmic-settings-daemon#ed1bc9e39e0380ea7e40233bb63960eeb674be34"
|
||||
source = "git+https://github.com/pop-os/cosmic-settings-daemon#eb886de5527f9b5d2f225708d63d9d36fbb63a64"
|
||||
dependencies = [
|
||||
"cosmic-config",
|
||||
"ron 0.9.0",
|
||||
|
|
@ -1762,7 +1762,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-settings-daemon-config"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/cosmic-settings-daemon#ed1bc9e39e0380ea7e40233bb63960eeb674be34"
|
||||
source = "git+https://github.com/pop-os/cosmic-settings-daemon#eb886de5527f9b5d2f225708d63d9d36fbb63a64"
|
||||
dependencies = [
|
||||
"cosmic-config",
|
||||
"ron 0.8.1",
|
||||
|
|
@ -3229,7 +3229,7 @@ dependencies = [
|
|||
"js-sys",
|
||||
"log",
|
||||
"wasm-bindgen",
|
||||
"windows-core 0.61.2",
|
||||
"windows-core 0.57.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -3262,7 +3262,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_accessibility"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1fce5df160f595d1b1e5a8e2bb2a24775419f82d"
|
||||
source = "git+https://github.com/pop-os/libcosmic#a55ed23ba8d8f8f72599daf0824074986057bdff"
|
||||
dependencies = [
|
||||
"accesskit",
|
||||
"accesskit_winit",
|
||||
|
|
@ -3271,7 +3271,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_core"
|
||||
version = "0.14.0-dev"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1fce5df160f595d1b1e5a8e2bb2a24775419f82d"
|
||||
source = "git+https://github.com/pop-os/libcosmic#a55ed23ba8d8f8f72599daf0824074986057bdff"
|
||||
dependencies = [
|
||||
"bitflags 2.9.1",
|
||||
"bytes",
|
||||
|
|
@ -3296,7 +3296,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_futures"
|
||||
version = "0.14.0-dev"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1fce5df160f595d1b1e5a8e2bb2a24775419f82d"
|
||||
source = "git+https://github.com/pop-os/libcosmic#a55ed23ba8d8f8f72599daf0824074986057bdff"
|
||||
dependencies = [
|
||||
"futures",
|
||||
"iced_core",
|
||||
|
|
@ -8451,7 +8451,7 @@ version = "0.54.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65"
|
||||
dependencies = [
|
||||
"windows-result 0.1.2",
|
||||
"windows-result",
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
|
|
@ -8463,23 +8463,10 @@ checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d"
|
|||
dependencies = [
|
||||
"windows-implement 0.57.0",
|
||||
"windows-interface 0.57.0",
|
||||
"windows-result 0.1.2",
|
||||
"windows-result",
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-core"
|
||||
version = "0.61.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
|
||||
dependencies = [
|
||||
"windows-implement 0.60.0",
|
||||
"windows-interface 0.59.1",
|
||||
"windows-link",
|
||||
"windows-result 0.3.4",
|
||||
"windows-strings",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-implement"
|
||||
version = "0.53.0"
|
||||
|
|
@ -8502,17 +8489,6 @@ dependencies = [
|
|||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-implement"
|
||||
version = "0.60.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-interface"
|
||||
version = "0.53.0"
|
||||
|
|
@ -8535,17 +8511,6 @@ dependencies = [
|
|||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-interface"
|
||||
version = "0.59.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-link"
|
||||
version = "0.1.1"
|
||||
|
|
@ -8561,24 +8526,6 @@ dependencies = [
|
|||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-result"
|
||||
version = "0.3.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
|
||||
dependencies = [
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-strings"
|
||||
version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
|
||||
dependencies = [
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.45.0"
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use std::{
|
||||
borrow::Cow,
|
||||
collections::{BTreeMap, BTreeSet},
|
||||
path::{Path, PathBuf},
|
||||
sync::Arc,
|
||||
|
|
@ -300,7 +301,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
.min_item_width(300.0)
|
||||
})
|
||||
|
|
@ -316,7 +317,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -331,7 +332,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -346,7 +347,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -361,7 +362,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -376,7 +377,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -391,7 +392,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -406,7 +407,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -421,7 +422,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.apply(Element::from)
|
||||
|
|
|
|||
|
|
@ -1276,7 +1276,7 @@ pub fn display_configuration() -> Section<crate::pages::Message> {
|
|||
widget::settings::item(
|
||||
&descriptions[scale],
|
||||
dropdown::popup_dropdown(
|
||||
&DPI_SCALE_LABELS,
|
||||
DPI_SCALE_LABELS.as_slice(),
|
||||
page.cache.scale_selected,
|
||||
Message::Scale,
|
||||
cosmic::iced::window::Id::RESERVED,
|
||||
|
|
|
|||
|
|
@ -25,9 +25,11 @@ use cosmic_settings_config::shortcuts::{self, Action, Shortcuts};
|
|||
use cosmic_settings_page::Section;
|
||||
use cosmic_settings_page::{self as page, section};
|
||||
use itertools::Itertools;
|
||||
use sctk::seat::keyboard::Keysym;
|
||||
use shortcuts::action::System as SystemAction;
|
||||
use slab::Slab;
|
||||
use slotmap::{DefaultKey, Key, SecondaryMap, SlotMap};
|
||||
use std::collections::BTreeSet;
|
||||
use std::io;
|
||||
|
||||
pub struct Page {
|
||||
|
|
@ -320,6 +322,10 @@ impl Search {
|
|||
let id = self.actions.insert(action.clone());
|
||||
self.localized.insert(id, localized);
|
||||
}
|
||||
// Remove unicode isolation characters to fix searching localized text that has them.
|
||||
for (_, localized) in self.localized.iter_mut() {
|
||||
*localized = localized.replace("\u{2068}", "").replace("\u{2069}", "");
|
||||
}
|
||||
}
|
||||
|
||||
fn retrieve_custom_actions(&self) -> Vec<(Binding, Action)> {
|
||||
|
|
@ -341,10 +347,29 @@ impl Search {
|
|||
}
|
||||
|
||||
fn shortcut_models(&mut self) -> Slab<ShortcutModel> {
|
||||
let shortcut_search_actions = match Binding::from_str_partial(&self.input) {
|
||||
Ok(input_binding) => self
|
||||
.shortcuts
|
||||
.iter()
|
||||
.filter_map(|(binding, action)| {
|
||||
if input_binding.is_subset(binding) {
|
||||
Some(action)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.collect::<BTreeSet<_>>(),
|
||||
Err(_) => Default::default(),
|
||||
};
|
||||
|
||||
let input = self.input.to_lowercase();
|
||||
|
||||
self.actions
|
||||
.iter()
|
||||
.filter(|(id, _)| self.localized[*id].to_lowercase().contains(&input))
|
||||
.filter(|(id, action)| {
|
||||
self.localized[*id].to_lowercase().contains(&input)
|
||||
|| shortcut_search_actions.contains(action)
|
||||
})
|
||||
.fold(Slab::new(), |mut slab, (_, action)| {
|
||||
slab.insert(ShortcutModel::new(
|
||||
&self.defaults,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue