mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
41 lines
909 B
Rust
41 lines
909 B
Rust
use anyhow::Result;
|
|
use yazi_core::which::WhichSorter;
|
|
use yazi_macro::{render, succ};
|
|
use yazi_parser::{spark::SparkKind, which::ActivateForm};
|
|
use yazi_shared::{Source, data::Data};
|
|
|
|
use crate::{Actor, Ctx};
|
|
|
|
pub struct Activate;
|
|
|
|
impl Actor for Activate {
|
|
type Form = ActivateForm;
|
|
|
|
const NAME: &str = "activate";
|
|
|
|
fn act(cx: &mut Ctx, Self::Form { mut opt }: Self::Form) -> Result<Data> {
|
|
opt.cands.retain(|c| c.on.len() > opt.times);
|
|
WhichSorter::default().sort(&mut opt.cands);
|
|
|
|
if opt.cands.is_empty() {
|
|
succ!();
|
|
}
|
|
|
|
let which = &mut cx.which;
|
|
which.tx = opt.tx;
|
|
which.layer = opt.layer;
|
|
which.cands = opt.cands;
|
|
which.times = opt.times;
|
|
|
|
which.active = true;
|
|
which.silent = opt.silent;
|
|
succ!(render!());
|
|
}
|
|
|
|
fn hook(cx: &Ctx, _form: &Self::Form) -> Option<SparkKind> {
|
|
match cx.source() {
|
|
Source::Unknown => Some(SparkKind::IndWhichActivate),
|
|
_ => None,
|
|
}
|
|
}
|
|
}
|