diff --git a/yazi-core/src/manager/commands/hover.rs b/yazi-core/src/manager/commands/hover.rs index 78760c43..7c9b4177 100644 --- a/yazi-core/src/manager/commands/hover.rs +++ b/yazi-core/src/manager/commands/hover.rs @@ -25,9 +25,15 @@ impl Manager { } pub fn hover(&mut self, opt: impl Into) { - // Hover on the file let opt = opt.into() as Opt; - render!(self.current_mut().repos(opt.url)); + + // Hover on the file + render!(self.current_mut().repos(opt.url.as_ref())); + if opt.url.zip(self.current().hovered()).is_some_and(|(u, f)| u == f.url) { + // `hover(Some)` occurs after user actions, such as create, rename, reveal, etc. + // At this point, it's intuitive to track the location of this file regardless. + self.current_mut().tracing = true; + } // Re-peek self.peek(false); diff --git a/yazi-plugin/preset/plugins/mime.lua b/yazi-plugin/preset/plugins/mime.lua index 6731af24..fd016c85 100644 --- a/yazi-plugin/preset/plugins/mime.lua +++ b/yazi-plugin/preset/plugins/mime.lua @@ -32,7 +32,7 @@ function M:preload() local i, j = 1, 0 repeat - local next, event = child:read_line_with { timeout = 100 } + local next, event = child:read_line_with { timeout = 300 } if event == 3 then flush(true) goto continue diff --git a/yazi-plugin/src/bindings/cha.rs b/yazi-plugin/src/bindings/cha.rs index 630fe2a2..e3e7ec0b 100644 --- a/yazi-plugin/src/bindings/cha.rs +++ b/yazi-plugin/src/bindings/cha.rs @@ -9,12 +9,11 @@ pub struct Cha; impl Cha { pub fn register(lua: &Lua) -> mlua::Result<()> { lua.register_userdata_type::(|reg| { - reg.add_field_method_get("is_link", |_, me| Ok(me.is_link())); - reg.add_field_method_get("is_hidden", |_, me| Ok(me.is_hidden())); - - // Metadata reg.add_field_method_get("is_dir", |_, me| Ok(me.is_dir())); - reg.add_field_method_get("is_symlink", |_, me| Ok(me.is_link())); + reg.add_field_method_get("is_hidden", |_, me| Ok(me.is_hidden())); + reg.add_field_method_get("is_link", |_, me| Ok(me.is_link())); + reg.add_field_method_get("is_bad_link", |_, me| Ok(me.is_bad_link())); + #[cfg(unix)] { reg.add_field_method_get("is_block_device", |_, me| Ok(me.is_block_device()));