1
0
Fork 0
forked from wry/wry

ei: add support for libei

This commit is contained in:
Julian Orth 2024-07-24 01:38:05 +02:00
parent 084fe50259
commit 40e87f8f91
69 changed files with 4340 additions and 72 deletions

View file

@ -20,6 +20,7 @@ mod idle;
mod input;
mod input_match;
pub mod keymap;
mod libei;
mod log_level;
mod mode;
pub mod modified_keysym;

View file

@ -14,6 +14,7 @@ use {
idle::IdleParser,
input::InputsParser,
keymap::KeymapParser,
libei::LibeiParser,
log_level::LogLevelParser,
output::OutputsParser,
repeat_rate::RepeatRateParser,
@ -27,7 +28,7 @@ use {
vrr::VrrParser,
},
spanned::SpannedErrorExt,
Action, Config, Theme,
Action, Config, Libei, Theme,
},
toml::{
toml_span::{DespanExt, Span, Spanned},
@ -110,6 +111,7 @@ impl Parser for ConfigParser<'_> {
window_management_key_val,
vrr_val,
tearing_val,
libei_val,
),
) = ext.extract((
(
@ -144,6 +146,7 @@ impl Parser for ConfigParser<'_> {
recover(opt(str("window-management-key"))),
opt(val("vrr")),
opt(val("tearing")),
opt(val("libei")),
),
))?;
let mut keymap = None;
@ -326,6 +329,15 @@ impl Parser for ConfigParser<'_> {
}
}
}
let mut libei = Libei::default();
if let Some(value) = libei_val {
match value.parse(&mut LibeiParser(self.0)) {
Ok(v) => libei = v,
Err(e) => {
log::warn!("Could not parse libei setting: {}", self.0.error(e));
}
}
}
Ok(Config {
keymap,
repeat_rate,
@ -352,6 +364,7 @@ impl Parser for ConfigParser<'_> {
window_management_key,
vrr,
tearing,
libei,
})
}
}

View file

@ -0,0 +1,44 @@
use {
crate::{
config::{
context::Context,
extractor::{bol, opt, recover, Extractor, ExtractorError},
parser::{DataType, ParseResult, Parser, UnexpectedDataType},
Libei,
},
toml::{
toml_span::{DespanExt, Span, Spanned},
toml_value::Value,
},
},
indexmap::IndexMap,
thiserror::Error,
};
#[derive(Debug, Error)]
pub enum LibeiParserError {
#[error(transparent)]
Expected(#[from] UnexpectedDataType),
#[error(transparent)]
Extract(#[from] ExtractorError),
}
pub struct LibeiParser<'a>(pub &'a Context<'a>);
impl Parser for LibeiParser<'_> {
type Value = Libei;
type Error = LibeiParserError;
const EXPECTED: &'static [DataType] = &[DataType::Table];
fn parse_table(
&mut self,
span: Span,
table: &IndexMap<Spanned<String>, Spanned<Value>>,
) -> ParseResult<Self> {
let mut ext = Extractor::new(self.0, span, table);
let enable_socket = ext.extract(recover(opt(bol("enable-socket"))))?;
Ok(Libei {
enable_socket: enable_socket.despan(),
})
}
}