This commit is contained in:
sxyazi 2024-03-02 20:28:17 +08:00
parent 6e1d88c3fa
commit 189a1bc745
No known key found for this signature in database
2 changed files with 17 additions and 12 deletions

View file

@ -8,6 +8,15 @@ pub struct InputRx {
impl InputRx {
pub fn new(inner: UnboundedReceiver<Result<String, InputError>>) -> Self { Self { inner } }
pub fn parse(res: Result<String, InputError>) -> (Option<String>, u8) {
match res {
Ok(s) => (Some(s), 1),
Err(InputError::Canceled(s)) => (Some(s), 2),
Err(InputError::Typed(s)) => (Some(s), 3),
_ => (None, 0),
}
}
}
impl UserData for InputRx {
@ -17,11 +26,7 @@ impl UserData for InputRx {
return Ok((None, 0));
};
Ok(match res {
Ok(s) => (Some(s), 1),
Err(InputError::Typed(s)) => (Some(s), 2),
_ => (None, 0),
})
Ok(Self::parse(res))
});
}
}

View file

@ -1,6 +1,6 @@
use std::str::FromStr;
use mlua::{ExternalError, ExternalResult, IntoLua, Lua, Table, Value};
use mlua::{ExternalError, ExternalResult, IntoLuaMulti, Lua, Table, Value};
use tokio::sync::mpsc;
use yazi_config::{keymap::{Control, Key}, popup::InputCfg};
use yazi_proxy::InputProxy;
@ -69,13 +69,13 @@ impl Utils {
highlight: false,
});
Ok(if realtime {
(InputRx::new(rx).into_lua(lua)?, Value::Nil)
} else if let Some(Ok(res)) = rx.recv().await {
(res.into_lua(lua)?, 1.into_lua(lua)?)
if realtime {
(InputRx::new(rx), Value::Nil).into_lua_multi(lua)
} else if let Some(res) = rx.recv().await {
InputRx::parse(res).into_lua_multi(lua)
} else {
(Value::Nil, 0.into_lua(lua)?)
})
(Value::Nil, 0).into_lua_multi(lua)
}
})?,
)?;