Add logging.
This commit is contained in:
parent
23dc47a008
commit
b76d325d60
3 changed files with 34 additions and 4 deletions
|
@ -8,7 +8,10 @@ edition = "2021"
|
|||
[dependencies]
|
||||
anyhow = "1.0.75"
|
||||
byteorder = "1.5.0"
|
||||
clap = { version = "4.4.6", features = ["derive"] }
|
||||
env_logger = "0.10.0"
|
||||
futures = "0.3.28"
|
||||
log = "0.4.20"
|
||||
rust_lisp = { git = "https://github.com/brundonsmith/rust_lisp.git", branch = "arc-feature-addition", features = ["arc"] }
|
||||
serde = { version = "1.0.188", features = ["std", "derive", "serde_derive"] }
|
||||
serde_json = "1.0.107"
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
use std::fmt::{Display, Formatter};
|
||||
use serde::{Serialize, Deserialize, Serializer, Deserializer};
|
||||
use rust_lisp::model::Value as RValue;
|
||||
|
||||
|
@ -18,6 +19,18 @@ impl Into<Vec<RValue>> for Value {
|
|||
}
|
||||
}
|
||||
|
||||
impl Display for Value {
|
||||
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
|
||||
let mut s = String::new();
|
||||
s.push_str("(begin\n");
|
||||
for i in &self.0 {
|
||||
s.push_str(&format!("{}\n", i));
|
||||
}
|
||||
s.push_str(")");
|
||||
write!(f, "{}", &s)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'de> Deserialize<'de> for Value {
|
||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||
where
|
||||
|
@ -29,7 +42,6 @@ impl<'de> Deserialize<'de> for Value {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Deserialize)]
|
||||
pub struct Program {
|
||||
|
|
21
src/main.rs
21
src/main.rs
|
@ -1,6 +1,8 @@
|
|||
use anyhow::Result;
|
||||
use tokio::time::{timeout, Duration};
|
||||
use tokio::io::AsyncReadExt;
|
||||
use clap::Parser;
|
||||
use log::{info, debug, warn};
|
||||
|
||||
mod config;
|
||||
mod i3ipc;
|
||||
|
@ -9,25 +11,35 @@ mod lisp;
|
|||
use config::Config;
|
||||
use i3ipc::{Connection, MessageType};
|
||||
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Args {
|
||||
}
|
||||
|
||||
fn new_window_cb(
|
||||
b: MessageType,
|
||||
c: serde_json::Value,
|
||||
config: &Config,
|
||||
args: &Args,
|
||||
) -> futures::future::BoxFuture<'static, Vec<(MessageType, Vec<u8>)>> {
|
||||
let config_ = config.clone();
|
||||
Box::pin(async move {
|
||||
debug!("Received window event: {}", &c);
|
||||
for p in config_.programs.iter() {
|
||||
debug!("Evaluating program: {}", &p.match_);
|
||||
let e = lisp::env(&c);
|
||||
let init: Vec<rust_lisp::model::Value> = config_.init.clone().into();
|
||||
let prog: Vec<rust_lisp::model::Value> = p.match_.clone().into();
|
||||
let m = init.into_iter().chain(prog.into_iter());
|
||||
let result = rust_lisp::interpreter::eval_block(rust_lisp::model::reference::new(e), m);
|
||||
println!("{:?}", result);
|
||||
if let Ok(rust_lisp::model::Value::True) = result {
|
||||
debug!("Match found");
|
||||
return vec![(MessageType::Command, p.cmd.clone().into_bytes())];
|
||||
}
|
||||
}
|
||||
|
||||
debug!("No match found");
|
||||
Vec::new()
|
||||
})
|
||||
}
|
||||
|
@ -47,6 +59,8 @@ async fn run<'a>(connection: &mut Connection<'a>, config: &Config) -> Result<(),
|
|||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
let args = std::sync::Arc::new(Args::parse());
|
||||
env_logger::init_from_env(env_logger::Env::new().filter("I3TOOLWAIT_LOG").write_style("I3TOOLWAIT_LOG_STYLE"));
|
||||
let mut connection = Connection::connect((i3ipc::get_socket_path().await?).as_ref())?;
|
||||
let mut sub_connection = connection.clone();
|
||||
|
||||
|
@ -56,7 +70,8 @@ async fn main() -> Result<()> {
|
|||
let config = std::sync::Arc::new(config);
|
||||
|
||||
let cb_config = config.clone();
|
||||
let cb = move |a, b| {new_window_cb(a, b, &cb_config)};
|
||||
let cb_args = args.clone();
|
||||
let cb = move |a, b| {new_window_cb(a, b, &cb_config, &cb_args)};
|
||||
sub_connection
|
||||
.subscribe(&[MessageType::SubWindow], &cb)
|
||||
.await?;
|
||||
|
|
Loading…
Reference in a new issue