Rebase and implment multi-mimetype copies from lua

This commit is contained in:
UnnaturalTwilight 2026-07-01 10:50:01 -04:00
parent 4943694f68
commit b74dab360f
2 changed files with 19 additions and 8 deletions

View file

@ -104,7 +104,7 @@ impl<'a> Dispatcher<'a> {
} }
fn dispatch_clipboard(&mut self, clip: ClipboardEvent) -> Result<()> { fn dispatch_clipboard(&mut self, clip: ClipboardEvent) -> Result<()> {
if self.app.core.input.main.visible { if self.app.core.input.focus() {
if let Some(text) = clip.text() { if let Some(text) = clip.text() {
self.dispatch_paste(text)?; self.dispatch_paste(text)?;
return Ok(()); return Ok(());

View file

@ -54,21 +54,32 @@ impl Tty {
_ => return Err("invalid FinishDrop type".into_lua_err()), _ => return Err("invalid FinishDrop type".into_lua_err()),
}, },
// Clipboard
b"ReadClipboard" => { b"ReadClipboard" => {
let esc_seq = ReadClipboard { write!(w, "{}", ReadClipboard {
mime: &t.raw_get::<BorrowedBytes>("mimes")?, mime: &t.raw_get::<BorrowedBytes>("mimes")?,
pw: &t.raw_get::<BorrowedBytes>("pw")?, pw: &t.raw_get::<BorrowedBytes>("pw")?,
name: &t.raw_get::<BorrowedBytes>("name")?, name: &t.raw_get::<BorrowedBytes>("name")?,
primary: t.raw_get("primary")?, primary: t.raw_get("primary")?,
}; })
write!(w, "{}", esc_seq)
} }
b"WriteClipboard" => { b"WriteClipboard" => {
let mime = &t.raw_get::<BorrowedBytes>("mime")?; let mut data = Vec::new();
let payload = &t.raw_get::<BorrowedBytes>("data")?; for v in &t.sequence_values::<Table>().collect::<Result<Vec<_>, mlua::Error>>()? {
let alias = &t.raw_get::<BorrowedBytes>("alias")?; data.push((
write!(w, "{}", WriteClipboard { data: vec![WriteClipboardData { mime, payload, alias }] }) v.raw_get::<BorrowedBytes>("mime")?,
v.raw_get::<BorrowedBytes>("data")?,
v.raw_get::<BorrowedBytes>("alias")?,
));
}
write!(w, "{}", WriteClipboard {
data: data
.iter()
.map(|(m, p, a)| { WriteClipboardData { mime: &m, payload: &p, alias: &a } })
.collect(),
})
} }
_ => return Err("invalid sequence kind".into_lua_err()), _ => return Err("invalid sequence kind".into_lua_err()),
}; };