mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-23 07:41:03 +00:00
feat: add new prepend_preloaders, append_preloaders, prepend_previewers, append_previewers config options
This commit is contained in:
parent
ac4afaf44e
commit
93c8d90a51
4 changed files with 43 additions and 11 deletions
|
|
@ -31,23 +31,51 @@ pub struct PluginRule {
|
|||
impl Default for Plugin {
|
||||
fn default() -> Self {
|
||||
#[derive(Deserialize)]
|
||||
struct Outer {
|
||||
plugin: Plugin,
|
||||
struct Shadow {
|
||||
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;
|
||||
if plugin.preloaders.len() > MAX_PRELOADERS as usize {
|
||||
#[derive(Deserialize)]
|
||||
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");
|
||||
}
|
||||
|
||||
for (i, preloader) in plugin.preloaders.iter_mut().enumerate() {
|
||||
for (i, preloader) in shadow.preloaders.iter_mut().enumerate() {
|
||||
if preloader.sync {
|
||||
panic!("Preloaders cannot be synchronous");
|
||||
}
|
||||
preloader.id = i as u8;
|
||||
}
|
||||
|
||||
plugin
|
||||
Self { preloaders: shadow.preloaders, previewers: shadow.previewers }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,5 +24,7 @@ impl Manager {
|
|||
|
||||
self.hover(None);
|
||||
self.update_paged((), tasks);
|
||||
|
||||
tasks.preload_sorted(&self.current().files);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@ use std::str::FromStr;
|
|||
use yazi_config::manager::SortBy;
|
||||
use yazi_shared::event::Exec;
|
||||
|
||||
use crate::{manager::Manager, tab::Tab};
|
||||
use crate::{manager::Manager, tab::Tab, tasks::Tasks};
|
||||
|
||||
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() {
|
||||
self.conf.sort_by = SortBy::from_str(by).unwrap_or_default();
|
||||
}
|
||||
|
|
@ -16,5 +16,7 @@ impl Tab {
|
|||
|
||||
self.apply_files_attrs();
|
||||
Manager::_update_paged();
|
||||
|
||||
tasks.preload_sorted(&self.current.files);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -94,9 +94,9 @@ impl<'a> Executor<'a> {
|
|||
return self.app.cx.manager.$name(exec, $($args),*);
|
||||
}
|
||||
};
|
||||
(ACTIVE, $name:ident) => {
|
||||
(ACTIVE, $name:ident $(,$args:expr)*) => {
|
||||
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) => {
|
||||
|
|
@ -159,7 +159,7 @@ impl<'a> Executor<'a> {
|
|||
on!(ACTIVE, find_arrow);
|
||||
|
||||
// Sorting
|
||||
on!(ACTIVE, sort);
|
||||
on!(ACTIVE, sort, &self.app.cx.tasks);
|
||||
|
||||
// Tabs
|
||||
on!(TABS, create);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue