yazi_core/manager/commands/
seek.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use yazi_config::PLUGIN;
use yazi_plugin::isolate;
use yazi_shared::event::{CmdCow, Data};

use crate::manager::Manager;

#[derive(Debug)]
struct Opt {
	units: i16,
}

impl From<CmdCow> for Opt {
	fn from(c: CmdCow) -> Self { Self { units: c.first().and_then(Data::as_i16).unwrap_or(0) } }
}

impl Manager {
	#[yazi_codegen::command]
	pub fn seek(&mut self, opt: Opt) {
		let Some(hovered) = self.hovered() else {
			return self.active_mut().preview.reset();
		};

		let Some(mime) = self.mimetype.by_file(hovered) else {
			return self.active_mut().preview.reset();
		};

		let Some(previewer) = PLUGIN.previewer(&hovered.url, mime) else {
			return self.active_mut().preview.reset();
		};

		isolate::seek_sync(&previewer.run, hovered.clone(), opt.units);
	}
}