diff --git a/yazi-fm/src/dispatcher.rs b/yazi-fm/src/dispatcher.rs index c02ffe98..61cac770 100644 --- a/yazi-fm/src/dispatcher.rs +++ b/yazi-fm/src/dispatcher.rs @@ -104,7 +104,7 @@ impl<'a> Dispatcher<'a> { } 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() { self.dispatch_paste(text)?; return Ok(()); diff --git a/yazi-tty/src/lua.rs b/yazi-tty/src/lua.rs index f1a15144..7a564c52 100644 --- a/yazi-tty/src/lua.rs +++ b/yazi-tty/src/lua.rs @@ -54,21 +54,32 @@ impl Tty { _ => return Err("invalid FinishDrop type".into_lua_err()), }, + // Clipboard b"ReadClipboard" => { - let esc_seq = ReadClipboard { + write!(w, "{}", ReadClipboard { mime: &t.raw_get::("mimes")?, pw: &t.raw_get::("pw")?, name: &t.raw_get::("name")?, primary: t.raw_get("primary")?, - }; - write!(w, "{}", esc_seq) + }) } b"WriteClipboard" => { - let mime = &t.raw_get::("mime")?; - let payload = &t.raw_get::("data")?; - let alias = &t.raw_get::("alias")?; - write!(w, "{}", WriteClipboard { data: vec![WriteClipboardData { mime, payload, alias }] }) + let mut data = Vec::new(); + for v in &t.sequence_values::().collect::, mlua::Error>>()? { + data.push(( + v.raw_get::("mime")?, + v.raw_get::("data")?, + v.raw_get::("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()), };