feat: add new prepend_preloaders, append_preloaders, prepend_previewers, append_previewers config options

This commit is contained in:
sxyazi 2024-01-06 12:58:42 +08:00
parent ac4afaf44e
commit 93c8d90a51
No known key found for this signature in database
4 changed files with 43 additions and 11 deletions

View file

@ -31,23 +31,51 @@ pub struct PluginRule {
impl Default for Plugin { impl Default for Plugin {
fn default() -> Self { fn default() -> Self {
#[derive(Deserialize)] #[derive(Deserialize)]
struct Outer { struct Shadow {
plugin: Plugin, preloaders: Vec<PluginRule>,
#[serde(default)]
prepend_preloaders: Vec<PluginRule>,
#[serde(default)]
append_preloaders: Vec<PluginRule>,
previewers: Vec<PluginRule>,
#[serde(default)]
prepend_previewers: Vec<PluginRule>,
#[serde(default)]
append_previewers: Vec<PluginRule>,
} }
let mut plugin = toml::from_str::<Outer>(&MERGED_YAZI).unwrap().plugin; #[derive(Deserialize)]
if plugin.preloaders.len() > MAX_PRELOADERS as usize { struct Outer {
plugin: Shadow,
}
let mut shadow = toml::from_str::<Outer>(&MERGED_YAZI).unwrap().plugin;
shadow.preloaders = shadow
.prepend_preloaders
.into_iter()
.chain(shadow.preloaders)
.chain(shadow.append_preloaders)
.collect();
shadow.previewers = shadow
.prepend_previewers
.into_iter()
.chain(shadow.previewers)
.chain(shadow.append_previewers)
.collect();
if shadow.preloaders.len() > MAX_PRELOADERS as usize {
panic!("Too many preloaders"); panic!("Too many preloaders");
} }
for (i, preloader) in plugin.preloaders.iter_mut().enumerate() { for (i, preloader) in shadow.preloaders.iter_mut().enumerate() {
if preloader.sync { if preloader.sync {
panic!("Preloaders cannot be synchronous"); panic!("Preloaders cannot be synchronous");
} }
preloader.id = i as u8; preloader.id = i as u8;
} }
plugin Self { preloaders: shadow.preloaders, previewers: shadow.previewers }
} }
} }

View file

@ -24,5 +24,7 @@ impl Manager {
self.hover(None); self.hover(None);
self.update_paged((), tasks); self.update_paged((), tasks);
tasks.preload_sorted(&self.current().files);
} }
} }

View file

@ -3,10 +3,10 @@ use std::str::FromStr;
use yazi_config::manager::SortBy; use yazi_config::manager::SortBy;
use yazi_shared::event::Exec; use yazi_shared::event::Exec;
use crate::{manager::Manager, tab::Tab}; use crate::{manager::Manager, tab::Tab, tasks::Tasks};
impl Tab { impl Tab {
pub fn sort(&mut self, e: &Exec) { pub fn sort(&mut self, e: &Exec, tasks: &Tasks) {
if let Some(by) = e.args.first() { if let Some(by) = e.args.first() {
self.conf.sort_by = SortBy::from_str(by).unwrap_or_default(); self.conf.sort_by = SortBy::from_str(by).unwrap_or_default();
} }
@ -16,5 +16,7 @@ impl Tab {
self.apply_files_attrs(); self.apply_files_attrs();
Manager::_update_paged(); Manager::_update_paged();
tasks.preload_sorted(&self.current.files);
} }
} }

View file

@ -94,9 +94,9 @@ impl<'a> Executor<'a> {
return self.app.cx.manager.$name(exec, $($args),*); return self.app.cx.manager.$name(exec, $($args),*);
} }
}; };
(ACTIVE, $name:ident) => { (ACTIVE, $name:ident $(,$args:expr)*) => {
if exec.cmd == stringify!($name) { if exec.cmd == stringify!($name) {
return self.app.cx.manager.active_mut().$name(exec); return self.app.cx.manager.active_mut().$name(exec, $($args),*);
} }
}; };
(TABS, $name:ident) => { (TABS, $name:ident) => {
@ -159,7 +159,7 @@ impl<'a> Executor<'a> {
on!(ACTIVE, find_arrow); on!(ACTIVE, find_arrow);
// Sorting // Sorting
on!(ACTIVE, sort); on!(ACTIVE, sort, &self.app.cx.tasks);
// Tabs // Tabs
on!(TABS, create); on!(TABS, create);