su: &'g mut Setup,
w: &'g Window,
matrix: OnceCell<ScreenCTM>,
+ client: OnceCell<String>,
}
impl Debug for WindowGuard<'_> {
}
}
+ #[throws(AE)]
+ pub fn client(&mut self) -> String {
+ let us = self.client.get_or_try_init(||{
+ let us = self.execute_script(r##"return us;"##)?;
+ let us = us.value();
+ let us = us.as_str().ok_or_else(
+ || anyhow!("return us script gave {:?}", &us))?;
+ Ok::<_,AE>(us.to_owned())
+ }).context("obtain client ID")?;
+ us.clone()
+ }
+
#[throws(AE)]
pub fn piece_held(&self, pc: &str) -> Option<String> {
let held = self.execute_script(&format!(r##"
w,
su: self,
matrix: default(),
+ client: default(),
}
}
}