diff --git a/yazi-fm/src/lives/file.rs b/yazi-fm/src/lives/file.rs index e987ff01..615ea1ea 100644 --- a/yazi-fm/src/lives/file.rs +++ b/yazi-fm/src/lives/file.rs @@ -95,7 +95,13 @@ impl File { }) }); reg.add_method("is_selected", |_, me, ()| Ok(me.tab().selected.contains(&me.url))); + reg.add_method("in_parent", |_, me, ()| { + Ok(me.tab().parent.as_ref().is_some_and(|f| me.folder().cwd == f.cwd)) + }); reg.add_method("in_current", |_, me, ()| Ok(me.folder().cwd == me.tab().current.cwd)); + reg.add_method("in_preview", |_, me, ()| { + Ok(me.tab().current.hovered().is_some_and(|f| me.folder().cwd == f.url)) + }); reg.add_method("found", |lua, me, ()| { let cx = lua.named_registry_value::("cx")?; let Some(finder) = &cx.manager.active().finder else { diff --git a/yazi-plugin/preset/components/current.lua b/yazi-plugin/preset/components/current.lua index 434ee475..54c35d4c 100644 --- a/yazi-plugin/preset/components/current.lua +++ b/yazi-plugin/preset/components/current.lua @@ -12,9 +12,7 @@ function Current:render(area) local items, markers = {}, {} for i, f in ipairs(files) do - local style = f:style() - items[#items + 1] = ui.ListItem(ui.Line(File:full(f))) - :style(f:is_hovered() and style:patch(THEME.manager.hovered) or style) + items[#items + 1] = ui.ListItem(ui.Line(File:full(f))):style(File:style(f)) -- Yanked/marked/selected files local marker = File:marker(f) diff --git a/yazi-plugin/preset/components/file.lua b/yazi-plugin/preset/components/file.lua index 402d45ad..d0b4a6a4 100644 --- a/yazi-plugin/preset/components/file.lua +++ b/yazi-plugin/preset/components/file.lua @@ -72,6 +72,17 @@ function File:full(file) } end +function File:style(file) + local style = file:style() + if not file:is_hovered() then + return style + elseif file:in_preview() then + return style and style:patch(THEME.manager.preview_hovered) or THEME.manager.preview_hovered + else + return style and style:patch(THEME.manager.hovered) or THEME.manager.hovered + end +end + function File:marker(file) local yanked = file:is_yanked() if yanked ~= 0 then diff --git a/yazi-plugin/preset/components/parent.lua b/yazi-plugin/preset/components/parent.lua index 40e9f99b..8d76f77f 100644 --- a/yazi-plugin/preset/components/parent.lua +++ b/yazi-plugin/preset/components/parent.lua @@ -12,9 +12,7 @@ function Parent:render(area) local items, markers = {}, {} for i, f in ipairs(folder.window) do - local style = f:style() - items[#items + 1] = ui.ListItem(ui.Line(File:full(f))) - :style(f:is_hovered() and style:patch(THEME.manager.hovered) or style) + items[#items + 1] = ui.ListItem(ui.Line(File:full(f))):style(File:style(f)) -- Yanked/marked/selected files local marker = File:marker(f) diff --git a/yazi-plugin/preset/plugins/folder.lua b/yazi-plugin/preset/plugins/folder.lua index 4cd127db..3948dfee 100644 --- a/yazi-plugin/preset/plugins/folder.lua +++ b/yazi-plugin/preset/plugins/folder.lua @@ -13,9 +13,7 @@ function M:peek() local items, markers = {}, {} for i, f in ipairs(folder.window) do - local style = f:style() - items[#items + 1] = ui.ListItem(ui.Line(File:full(f))) - :style(f:is_hovered() and style:patch(THEME.manager.preview_hovered) or style) + items[#items + 1] = ui.ListItem(ui.Line(File:full(f))):style(File:style(f)) -- Yanked/marked/selected files local marker = File:marker(f)