use anyhow::Result; use yazi_macro::{render, succ}; use yazi_parser::mgr::UpdateSpottedOpt; use yazi_shared::event::Data; use crate::{Actor, Ctx}; pub struct UpdateSpotted; impl Actor for UpdateSpotted { type Options = UpdateSpottedOpt; const NAME: &str = "update_spotted"; fn act(cx: &mut Ctx, mut opt: Self::Options) -> Result { let tab = cx.tab_mut(); let Some(hovered) = tab.hovered().map(|h| &h.url) else { succ!(tab.spot.reset()); }; if opt.lock.url != *hovered { succ!(); } if tab.spot.lock.as_ref().is_none_or(|l| l.id != opt.lock.id) { tab.spot.skip = opt.lock.selected().unwrap_or_default(); } else if let Some(s) = opt.lock.selected() { tab.spot.skip = s; } else { opt.lock.select(Some(tab.spot.skip)); } tab.spot.lock = Some(opt.lock); succ!(render!()); } }