mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
39 lines
897 B
Rust
39 lines
897 B
Rust
use yazi_config::PLUGIN;
|
|
use yazi_plugin::isolate;
|
|
use yazi_shared::{event::Cmd, render, MIME_DIR};
|
|
|
|
use crate::manager::Manager;
|
|
|
|
#[derive(Debug)]
|
|
pub struct Opt {
|
|
units: i16,
|
|
}
|
|
|
|
impl From<Cmd> for Opt {
|
|
fn from(mut c: Cmd) -> Self {
|
|
Self { units: c.take_first().and_then(|s| s.parse().ok()).unwrap_or(0) }
|
|
}
|
|
}
|
|
|
|
impl Manager {
|
|
pub fn seek(&mut self, opt: impl Into<Opt>) {
|
|
let Some(hovered) = self.hovered() else {
|
|
return render!(self.active_mut().preview.reset());
|
|
};
|
|
|
|
let mime = if hovered.is_dir() {
|
|
MIME_DIR
|
|
} else if let Some(s) = self.mimetype.get(&hovered.url) {
|
|
s
|
|
} else {
|
|
return render!(self.active_mut().preview.reset());
|
|
};
|
|
|
|
let Some(previewer) = PLUGIN.previewer(&hovered.url, mime) else {
|
|
return render!(self.active_mut().preview.reset());
|
|
};
|
|
|
|
let opt = opt.into() as Opt;
|
|
isolate::seek_sync(&previewer.cmd, hovered.clone(), opt.units);
|
|
}
|
|
}
|