feat(core): pass RLVMO config to detect and inject modules
This commit is contained in:
parent
8691e68e6b
commit
b9ae27a1e9
75
espanso/src/cli/worker/engine/keyboard_layout_util.rs
Normal file
75
espanso/src/cli/worker/engine/keyboard_layout_util.rs
Normal file
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* This file is part of espanso.
|
||||
*
|
||||
* Copyright (C) 2019-2021 Federico Terzi
|
||||
*
|
||||
* espanso is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* espanso is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with espanso. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
use espanso_config::config::{Config, RMLVOConfig};
|
||||
use log::{info, warn};
|
||||
|
||||
fn generate_rmlvo_config(config: &dyn Config) -> Option<RMLVOConfig> {
|
||||
// Not needed on Windows and macOS
|
||||
if !cfg!(target_os = "linux") {
|
||||
return None;
|
||||
}
|
||||
|
||||
// Not needed on X11
|
||||
if !cfg!(feature = "wayland") {
|
||||
return None;
|
||||
}
|
||||
|
||||
if let Some(keyboard_config) = config.keyboard_layout() {
|
||||
Some(keyboard_config)
|
||||
} else if let Some(active_layout) = espanso_detect::get_active_layout() {
|
||||
Some(RMLVOConfig {
|
||||
layout: Some(active_layout),
|
||||
..Default::default()
|
||||
})
|
||||
} else {
|
||||
warn!("unable to determine keyboard layout automatically, please explicitly specify it in the configuration.");
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
pub fn generate_detect_rmlvo(config: &dyn Config) -> Option<espanso_detect::KeyboardConfig> {
|
||||
generate_rmlvo_config(config)
|
||||
.map(|config| {
|
||||
info!("detection module will use this keyboard layout: {}", config);
|
||||
config
|
||||
})
|
||||
.map(|config| espanso_detect::KeyboardConfig {
|
||||
rules: config.rules,
|
||||
model: config.model,
|
||||
layout: config.layout,
|
||||
variant: config.variant,
|
||||
options: config.options,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn generate_inject_rmlvo(config: &dyn Config) -> Option<espanso_inject::KeyboardConfig> {
|
||||
generate_rmlvo_config(config)
|
||||
.map(|config| {
|
||||
info!("inject module will use this keyboard layout: {}", config);
|
||||
config
|
||||
})
|
||||
.map(|config| espanso_inject::KeyboardConfig {
|
||||
rules: config.rules,
|
||||
model: config.model,
|
||||
layout: config.layout,
|
||||
variant: config.variant,
|
||||
options: config.options,
|
||||
})
|
||||
}
|
|
@ -48,6 +48,7 @@ use super::secure_input::SecureInputEvent;
|
|||
pub mod dispatch;
|
||||
pub mod funnel;
|
||||
pub mod process;
|
||||
mod keyboard_layout_util;
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn initialize_and_spawn(
|
||||
|
@ -90,6 +91,7 @@ pub fn initialize_and_spawn(
|
|||
let (detect_source, modifier_state_store, sequencer, key_state_store) =
|
||||
super::engine::funnel::init_and_spawn(SourceCreationOptions {
|
||||
use_evdev: use_evdev_backend,
|
||||
evdev_keyboard_rmlvo: keyboard_layout_util::generate_detect_rmlvo(&*config_manager.default()),
|
||||
..Default::default()
|
||||
})
|
||||
.expect("failed to initialize detector module");
|
||||
|
@ -130,6 +132,7 @@ pub fn initialize_and_spawn(
|
|||
let injector = espanso_inject::get_injector(InjectorCreationOptions {
|
||||
use_evdev: use_evdev_backend,
|
||||
keyboard_state_provider: key_state_store.map(|store| Box::new(store) as Box<dyn KeyboardStateProvider>),
|
||||
evdev_keyboard_rmlvo: keyboard_layout_util::generate_inject_rmlvo(&*config_manager.default()),
|
||||
..Default::default()
|
||||
})
|
||||
.expect("failed to initialize injector module"); // TODO: handle the options
|
||||
|
|
Loading…
Reference in New Issue
Block a user