Added prefix & config to Randr

This commit is contained in:
Kirottu
2023-04-25 22:06:18 +03:00
parent b4f1f292bb
commit f56d95fa31
3 changed files with 39 additions and 7 deletions

10
Cargo.lock generated
View File

@@ -1478,6 +1478,8 @@ dependencies = [
"anyrun-plugin", "anyrun-plugin",
"fuzzy-matcher", "fuzzy-matcher",
"hyprland", "hyprland",
"ron",
"serde",
] ]
[[package]] [[package]]
@@ -1713,18 +1715,18 @@ dependencies = [
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.159" version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
dependencies = [ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.159" version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",

View File

@@ -13,3 +13,5 @@ fuzzy-matcher = "0.3.7"
anyrun-plugin = { path = "../../anyrun-plugin" } anyrun-plugin = { path = "../../anyrun-plugin" }
abi_stable = "0.11.1" abi_stable = "0.11.1"
hyprland = "0.3" hyprland = "0.3"
ron = "0.8.0"
serde = { version = "1.0.160", features = ["derive"] }

View File

@@ -1,12 +1,26 @@
use std::env; use std::{env, fs};
use abi_stable::std_types::{ROption, RString, RVec}; use abi_stable::std_types::{ROption, RString, RVec};
use anyrun_plugin::{anyrun_interface::HandleResult, plugin, Match, PluginInfo}; use anyrun_plugin::{anyrun_interface::HandleResult, plugin, Match, PluginInfo};
use fuzzy_matcher::FuzzyMatcher; use fuzzy_matcher::FuzzyMatcher;
use randr::{dummy::Dummy, hyprland::Hyprland, Configure, Monitor, Randr}; use randr::{dummy::Dummy, hyprland::Hyprland, Configure, Monitor, Randr};
use serde::Deserialize;
mod randr; mod randr;
#[derive(Deserialize)]
struct Config {
prefix: String,
}
impl Default for Config {
fn default() -> Self {
Config {
prefix: ":dp".to_string(),
}
}
}
enum InnerState { enum InnerState {
None, None,
Position(Monitor), Position(Monitor),
@@ -14,10 +28,11 @@ enum InnerState {
pub struct State { pub struct State {
randr: Box<dyn Randr + Send + Sync>, randr: Box<dyn Randr + Send + Sync>,
config: Config,
inner: InnerState, inner: InnerState,
} }
pub fn init(_config_dir: RString) -> State { pub fn init(config_dir: RString) -> State {
// Determine which Randr implementation should be used // Determine which Randr implementation should be used
let randr: Box<dyn Randr + Send + Sync> = if env::var("HYPRLAND_INSTANCE_SIGNATURE").is_ok() { let randr: Box<dyn Randr + Send + Sync> = if env::var("HYPRLAND_INSTANCE_SIGNATURE").is_ok() {
Box::new(Hyprland::new()) Box::new(Hyprland::new())
@@ -27,6 +42,13 @@ pub fn init(_config_dir: RString) -> State {
State { State {
randr, randr,
config: match fs::read_to_string(format!("{}/randr.ron", config_dir)) {
Ok(content) => ron::from_str(&content).unwrap_or_default(),
Err(why) => {
eprintln!("Error reading Randr config file: {}", why);
Config::default()
}
},
inner: InnerState::None, inner: InnerState::None,
} }
} }
@@ -77,6 +99,12 @@ pub fn handler(_match: Match, state: &mut State) -> HandleResult {
} }
pub fn get_matches(input: RString, state: &mut State) -> RVec<Match> { pub fn get_matches(input: RString, state: &mut State) -> RVec<Match> {
if !input.starts_with(&state.config.prefix) {
return RVec::new();
}
let input = &input[state.config.prefix.len()..].trim();
let matcher = fuzzy_matcher::skim::SkimMatcherV2::default().smart_case(); let matcher = fuzzy_matcher::skim::SkimMatcherV2::default().smart_case();
let mut vec = match &state.inner { let mut vec = match &state.inner {
InnerState::None => state InnerState::None => state
@@ -148,7 +176,7 @@ pub fn get_matches(input: RString, state: &mut State) -> RVec<Match> {
.into_iter() .into_iter()
.filter_map(|_match| { .filter_map(|_match| {
matcher matcher
.fuzzy_match(&_match.title, &input) .fuzzy_match(&_match.title, input)
.map(|score| (_match, score)) .map(|score| (_match, score))
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();